From b905f2f273519eb3ea908997ac39ba9031a66f6f Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 10 Aug 2017 13:47:06 -0300 Subject: [PATCH 001/642] net cdf and quantum vibes --- docs/quantum_theory_of_gravity.rst | 77 ++++++++++++++++++++++++++++++ karmapi/ncdf.py | 10 +++- 2 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 docs/quantum_theory_of_gravity.rst diff --git a/docs/quantum_theory_of_gravity.rst b/docs/quantum_theory_of_gravity.rst new file mode 100644 index 0000000..dfab459 --- /dev/null +++ b/docs/quantum_theory_of_gravity.rst @@ -0,0 +1,77 @@ +============================= + A Quantum Theory of Gravity +============================= + +It's all waves, gravitational waves. + + + +Water +===== + +Two protons dancing round 8 friends. + + +Schrodinger's Cat +================= + +What is an observation? + +An observation is when energy is turned into momentum or vice-versa. + +So when is the observation made in this experiment? + +A photon enters the box, passes through the half mirror... + + +What's momentum +=============== + +mass * velocity + +Oh and there is a law of conservation of momentum. + + +What is energy? +=============== + +A gravitational wave. + +Gravitational field +=================== + +Matter, which is itself just gravitational waves. + +Gyroscopes +========== + +Bouncing along the waves, creating waves. + +What is mass? +============= + +Einstein +======== + +Einstein guessed gravitational waves may be a thing. Two years ago, +they were detected, they are a thing. + + + +Planck +====== + +Planck had a constant named after him. They call it *h*. + +When energy, in the form of photons, is created the frequency of the +photon is linearly proportional to the momentum. + +It is also linearly proportional to the ?? + + +Electrons and protons +===================== + + +Resonance +========= diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 0dac2bd..4d3bf56 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -1,9 +1,17 @@ """ Interface to netcdf files """ +import datetime +import math import netCDF4 + def load(path): - return netCDF4.DataSet(path) + return netCDF4.Dataset(path) + + +def images(path, folder): + + df = load(path) From ce4653b2cad80d013b5306c7065e6243a206741d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 10 Aug 2017 14:13:55 -0300 Subject: [PATCH 002/642] gravity background time --- docs/quantum_theory_of_gravity.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/quantum_theory_of_gravity.rst b/docs/quantum_theory_of_gravity.rst index dfab459..1b1a716 100644 --- a/docs/quantum_theory_of_gravity.rst +++ b/docs/quantum_theory_of_gravity.rst @@ -75,3 +75,13 @@ Electrons and protons Resonance ========= + +Background +========== + +Mean gravitational field, varies in time. + +Time +==== + +?? From ebe76b4869485c522c979361cfa03a00e61c3045 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 10 Aug 2017 15:10:14 -0300 Subject: [PATCH 003/642] hidden dark matter computer --- docs/quantum_theory_of_gravity.rst | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/docs/quantum_theory_of_gravity.rst b/docs/quantum_theory_of_gravity.rst index 1b1a716..19af4a0 100644 --- a/docs/quantum_theory_of_gravity.rst +++ b/docs/quantum_theory_of_gravity.rst @@ -4,7 +4,11 @@ It's all waves, gravitational waves. +A field that propogates through itself. +Local resonance and structure. + +Celestial harmony. Water ===== @@ -85,3 +89,22 @@ Time ==== ?? + +Dark Matter +=========== + +Local areas of structure within the field, below the noise. + +But you will get in sync if you pass by. + + +Quantum crypto +============== + +Agreeing a local field structure below the noise. + +Quantum computer +================ + +Look for structure in hidden field. + From 0904195868abcee7dec37fd58f6b09940184e6f2 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 11 Aug 2017 11:47:09 -0300 Subject: [PATCH 004/642] resonance and harmony --- docs/quantum_theory_of_gravity.rst | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/docs/quantum_theory_of_gravity.rst b/docs/quantum_theory_of_gravity.rst index 19af4a0..6a9d035 100644 --- a/docs/quantum_theory_of_gravity.rst +++ b/docs/quantum_theory_of_gravity.rst @@ -77,8 +77,30 @@ Electrons and protons ===================== -Resonance -========= +Resonance and Harmony +===================== + +Imagine being inside a recently formed black hole. A chaotic +implosion of matter. + +Matter which is moving and hence generating gravitational waves. + +A random distribution of white noise. + +Locally, there may be vibrations at the same frequency. + +Harmonics will emerge. + +Perhaps the resulting distribution of energy will follow a harmonic +distribution. + +The total amount of energy in a given frequency being proportional to +that frequency itself. + +This distribution of energy in the universe's gravitational field +would give rise naturally to the quantum phenomena and in particular +give rise to the Planck-Einstein relation, *E = hf*. + Background ========== From 4e8f43c9b3877d0769eec1b73fd87c4c080147e1 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 12 Aug 2017 20:27:26 -0300 Subject: [PATCH 005/642] theory of waves in self referential time --- docs/quantum_theory_of_gravity.rst | 54 +++++++++++++++++++++++++++--- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/docs/quantum_theory_of_gravity.rst b/docs/quantum_theory_of_gravity.rst index 6a9d035..2f695e6 100644 --- a/docs/quantum_theory_of_gravity.rst +++ b/docs/quantum_theory_of_gravity.rst @@ -1,6 +1,6 @@ -============================= - A Quantum Theory of Gravity -============================= +=========================== + A Theory of Waves in Time +=========================== It's all waves, gravitational waves. @@ -10,9 +10,36 @@ Local resonance and structure. Celestial harmony. +Setting +======= + +Imagine a void. A cube of None marching through time. + +The cube cut into 8 smaller cubes, in turn each 8 smaller. + +And so on all the way down. + +Make the edges of the cubes vibrate, with the frequency inversely +proportional to the length of the cube side. + +Have the energy for each frequency be some magic constant multiple of +the frequency. + +The strings are perfectly elastic, so the vibrations pass through the +void at the speed of light. + +When a wave passes, a cube offers resistance, inertia, that has to be +overcome to move it. + +Below a certain threshold, the cube is pulled back by the fabric of +time. + + Water ===== +Add a drop of water to the void. + Two protons dancing round 8 friends. @@ -27,7 +54,6 @@ So when is the observation made in this experiment? A photon enters the box, passes through the half mirror... - What's momentum =============== @@ -54,6 +80,8 @@ Bouncing along the waves, creating waves. What is mass? ============= +Mass is a standing wave of energy in the fabric of space time. + Einstein ======== @@ -130,3 +158,21 @@ Quantum computer Look for structure in hidden field. + +Karma +===== + +Waves that a body creates bounce back as they harmonise with the +universe around. + + +Godel, Escher, Bach +=================== + +Self reference. + + +Incompleteness of mathematics +============================= + +Mathematics of self referential fields. From 5e47e1543b7d2cc6686e9a0d0b04686c365ddf32 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 13 Aug 2017 21:39:48 -0300 Subject: [PATCH 006/642] somewhere under a rainbow way up high --- karmapi/rainbow.py | 58 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 karmapi/rainbow.py diff --git a/karmapi/rainbow.py b/karmapi/rainbow.py new file mode 100644 index 0000000..c5908b2 --- /dev/null +++ b/karmapi/rainbow.py @@ -0,0 +1,58 @@ +""" +Somewhere + +under a rainbow + +way up high + +Credits: GOES East Rainbow data from NOAA +""" +import argparse +import datetime +from pathlib import Path +import curio + +import requests + +from karmapi import base, tpot + +URL = "http://www.ssd.noaa.gov/goes/east/tatl/rb-animated.gif" + + +def get(path, url=URL): + """ Get latest rainbow """ + + with Path(path).open('wb') as out: + out.write(requests.get(url).content) + + +async def capture(args): + + + while True: + + now = datetime.datetime.now() + path = Path(f'{args.path}/{now.year}/{now.month}/{now.day}') + path.mkdir(exist_ok=True, parents=True) + path = path / f'{now.hour:02}{now.minute:02}{now.second:02}.gif' + + print(path) + get(str(path)) + await curio.sleep(args.sleep) + + + +def main(): + + parser = argparse.ArgumentParser() + parser.add_argument('--sleep', type=float, default=60*60) + parser.add_argument('path', nargs='?', default='.') + + args = parser.parse_args() + + curio.run(capture(args)) + + +if __name__ == '__main__': + + main() From 01cbd6f3ef2493c3f9cb4f03e46639ae14a08f62 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 14 Aug 2017 00:43:40 +0000 Subject: [PATCH 007/642] rainbow cron --- crontab/rainbow | 5 +++++ 1 file changed, 5 insertions(+) create mode 100755 crontab/rainbow diff --git a/crontab/rainbow b/crontab/rainbow new file mode 100755 index 0000000..6a2f840 --- /dev/null +++ b/crontab/rainbow @@ -0,0 +1,5 @@ +# rainbow images + +@reboot pi /usr/local/bin/python3.6 -m karmapi.rainbow /home/pi/karmapi/rainbow + + From 998e22b6f24a34c866002a261ec85438b0daa776 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 13 Aug 2017 22:13:48 -0300 Subject: [PATCH 008/642] h 2 o --- docs/quantum_theory_of_gravity.rst | 56 +++++++++++++++++++++++++++--- 1 file changed, 52 insertions(+), 4 deletions(-) diff --git a/docs/quantum_theory_of_gravity.rst b/docs/quantum_theory_of_gravity.rst index 2f695e6..84e067b 100644 --- a/docs/quantum_theory_of_gravity.rst +++ b/docs/quantum_theory_of_gravity.rst @@ -42,6 +42,8 @@ Add a drop of water to the void. Two protons dancing round 8 friends. +H20, 47b, its everywhere here. + Schrodinger's Cat ================= @@ -67,21 +69,32 @@ What is energy? A gravitational wave. +A change in energy, changes the waves. + +momentum times ache gives the energy. + +and frequency is proportional to momentum too. + + Gravitational field =================== Matter, which is itself just gravitational waves. +Waves running in circles and eights and more, gyroscopes in the sky. + Gyroscopes ========== -Bouncing along the waves, creating waves. +Bouncing along the waves, creating waves as they pass. What is mass? ============= Mass is a standing wave of energy in the fabric of space time. +A gyroscope that pulls as you pull. + Einstein ======== @@ -89,7 +102,6 @@ Einstein guessed gravitational waves may be a thing. Two years ago, they were detected, they are a thing. - Planck ====== @@ -101,8 +113,12 @@ photon is linearly proportional to the momentum. It is also linearly proportional to the ?? -Electrons and protons -===================== +Neutrons +======== + +There are lot of these about round here. Or things that can be +rearranged into neutrons, and yield energy. + Resonance and Harmony @@ -176,3 +192,35 @@ Incompleteness of mathematics ============================= Mathematics of self referential fields. + + +Predictions +=========== + +Dark matter +----------- + +Black holes which have evaporated. + +Areas of wonderful hidden structure we can only see if we pass +through? + +Lenses that focus gravitational waves. + +Water +----- + +under the electron microscope. + +Homeopathy? DIY homeopathy? + +Diagnose the planet with sea samples under electron microscope? + +Moon and planets +---------------- + + +Does God play dice? +------------------- + +If so how does the game go? From 3d8f94cdbe3c88036e94d6ca35da269134b009b6 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 13 Aug 2017 22:56:50 -0300 Subject: [PATCH 009/642] music of the universe --- docs/quantum_theory_of_gravity.rst | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/docs/quantum_theory_of_gravity.rst b/docs/quantum_theory_of_gravity.rst index 84e067b..2d8460a 100644 --- a/docs/quantum_theory_of_gravity.rst +++ b/docs/quantum_theory_of_gravity.rst @@ -224,3 +224,24 @@ Does God play dice? ------------------- If so how does the game go? + + +Gravitational decay rate +------------------------ + +When two black holes spiral into each other how near can you be to +watch? + +Number of wavelengths away before you barely notice? + + +Probably OK so long as you don't get sucked in, you are already along +for the ride and have been for some time... + + +Therefore, field would seem to be extremely homogeneous, as noted, +time seems to be similar for lots of places in our universe. + +There can be big local explosions and nobody notices. + +It will follow a harmonic distribution. From 8bd573d3d26b243a0cd7e83ac3df6cbc39b807b2 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 17 Aug 2017 12:49:18 -0300 Subject: [PATCH 010/642] talk outline --- docs/waves_in_time.rst | 99 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 docs/waves_in_time.rst diff --git a/docs/waves_in_time.rst b/docs/waves_in_time.rst new file mode 100644 index 0000000..cf9d7d1 --- /dev/null +++ b/docs/waves_in_time.rst @@ -0,0 +1,99 @@ +=========================== + A theory of waves in time +=========================== + + +Forget everything you ever thought you knew about physics. + +Well, not quite everything. + +Bring with you everything you are sure you know. + +How do you know you know? + +Does this tell you something about the nature of information? + +BOTLOCOM +======== + + +Electron +======== + + +Proton +====== + + +Neutron +======= + +hydrogen + +oxygen + +Water +===== + +Dancing and harmony + +Pools, oceans and rivers +======================== + + +Gravity +======= + +Intertia +======== + +Constant G +========== + +Relativity +========== + +Black Hole +========== + +And the tale of the singularity that isn't. + +Gravitational Wave +================== + +Planck h +======== + +Kathryn Wheel +============= + +Schwartschild r +=============== + +Quanta +====== + +Quantum Uncertainty +=================== + +Snowy and the moon +================== + +Dark matter. + +Below the noise +=============== + +how quantum cryptography works. + +Math +==== + +Poincare, Einstein, Fourier, Tesla, Klein + +Godel, Escher, Bach + +Does God play Dice? +=================== + +If so, how? From fafd4b4caeba24c1c7cb54144a6118d8563594dc Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 19 Aug 2017 13:28:04 -0300 Subject: [PATCH 011/642] how the moai walked to the coast --- docs/rongorongo.rst | 121 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 docs/rongorongo.rst diff --git a/docs/rongorongo.rst b/docs/rongorongo.rst new file mode 100644 index 0000000..d3d1862 --- /dev/null +++ b/docs/rongorongo.rst @@ -0,0 +1,121 @@ +========== + Rapa Nui +========== + +Once upon a time there was a team of stone masons who carved out a +giant block of rock from the volcanic tuff on the side of an extinct +volcano. + +A second team carved a similar block. + +Once the blocks were complete, with carved heads and a rounded front +edge, the rock underneath the horizontal moai was carved away in such +a way that the Moai was able to tile and rise under its own weight. + +Balance is critical here. First make it so the giant block is nearly +tipping, then make it oscillate like a tiny pendulum. + +A second Moai placed close and made to oscillate at the same frequency +will then resonate in harmony with the first. + +Once upright, they will walk down the hill together. + +The key is that the two Moai are in resonance, the gravitational waves +one sends out being in harmony with the other. As one sways, so does +the other in an equal and opposite motion. + +They may start to circle each other. + +To keep the motion going, a source of energy is required. The Moai +start at the top of the hill and slowly walk down it, earth's +gravitational field supplying the energy. + +Easter Island is where it is because it is at the centre of a giant +rotating magnetic storm on planet earth. + +The rock of the Moai likely contain significant quantities of iron, +rocks that can hold a magnetic field. + +This may be a key to how the Moai can rock and resonate without that +resonance building to the point that they topple. + +Now, since the Moai are in effect giant magnets, the earth's magnetic +field will tend to push them back upright. If you move a magnet +through a magnetic field, that field resists the movement and an +electric current is generated. If the electric current is exactly the +right size to create an equal and opposite force to the movement, then +the Moai will simply rock like a pendulum. + +Around each Moai, a standing wave will form. This standing wave turns +the Moai into a giant rocking pendulum trapped in the fabric of space +time. + +As more Moai are created and set on their journey of walking down to +their resting place on the ahu platforms, the Moai will resonate in +harmony. + +At a certain density of Moai, this resonance will be so strong, the +wave produced will make it impossible to add another Moai to the +system. + +The Moai might start to rock gently, but the oscillations will +increase over time and eventually it will topple. + +To the people of Rapa Nui, this all must have seemed like magic, a +special power, or Mana. + +The people will have learnt that certain times of the year there is a +greater probability of a new Moai staying stable. + +Archaeologist are fond of creating narratives that fit with the +artifacts they discover. + +The best narratives, the ones that are in fact the true story, lead to +other discoveries. + +This account is one such narrative. + +It is hard to imagine that the people would not have had great +ceremonies when a Moai was ready to be launched. Maybe they were +always launched at full moon, at certain times of the year? + + +And this leads to the mysterious *rongorongo* writings that have been +discovered. + +Messages etched onto special wood used for writing. This is not just +old envelopes onto which you scribble a shopping list, rather +expensive, hard to obtain writing paper. + +What was most important to the people of Rapa Nui? The records of +the Moai's walks down to the coast. The ones that walked, the ones +that fell. + +The ahu are just platforms build to help bring a Moai to rest at a +place where it can strengthen the Mana of the island. + +Perhaps the *ahu* are at places where Moai came to rest. Later, +perhaps after a storm they may have started to walk again. + +A well constructed *ahu* should have a gentle upward slope, so the +Moai can slowly lose its forward momentum. + +Moai will spin as they walk. This turns them into giant, slowly +revolving gyroscopes. + +The spin itself leads to stability, because of the law of conservation +of angular momentum, which is just a corollary to the law of +conservation of momentum, which itself is just a fundamental property +of gravitational fields. + +The slight asymetry in the Moai, due to the carving of heads has the +wonderful property that Moai are statistically much more likely to +come to rest facing inland than facing out to sea. + + +Reference +========= + +https://www.youtube.com/watch?v=J5YR0uqPAI8 + +http://www.robertschoch.com/articles/schochbaddeleyeasterislandproposal.pdf From 979cd464d46376feee7a615d406d37aa10561ace Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 19 Aug 2017 14:51:49 -0300 Subject: [PATCH 012/642] to whom it may concern --- docs/dear_reader.rst | 91 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 docs/dear_reader.rst diff --git a/docs/dear_reader.rst b/docs/dear_reader.rst new file mode 100644 index 0000000..f4e90ca --- /dev/null +++ b/docs/dear_reader.rst @@ -0,0 +1,91 @@ +======================== + To whom it may concern +======================== + +I have had the wonderful privelege to spend much of the last month in +my back yard in Bermuda, by a beautiful crystal clear pool, with views +down to the sea and up to the lighthouse that shines over the land. + +Nobody seems to want me to work for them. I can't really blame them, +I draw energy from those around, like a mini black hole in my own +little universe. + +There are flares and spouts of fire. Waves of unimaginable beauty. + +But if you are too close, or on a different wave, it hits you like a +Mersenne prime from the mysts of time. + +So, back by the pool. + +I have water, lots of water. + + +A table, an umbrella. As the young child told me at the lighthouse, +you need an umbrella. + +And a hosepipe, but a pool noodle might do. + +And bottles. + +Klein ones two, a twisted infinite figure of eight. + +Pools too. Pools connected by waves through the tubes of time. + +And magnets too, driven by wheels in the sky. + + + +I am just sitting here watching the wheels go by + +As the moai walk straight down the pool + +But there straight is a spiral, an infinite moebus figure of eight. + + +The clouds they pass by, a breeze in the air. + +The rhythm of black holes away in the sea. + +As they swirl and they dance to the rhythm of the numbers as they +dance themselves. + +An infinite figure of eight. + + +The rain it may fall + +Drops dance in the pool + +An infinite swirl of rhythm and dance. + +When the rain it does end and the clouds they do clear + +The pool is a shimmer, with waves here and thither. + +As the music of the moai gains another harmonic. + +In time it does settle, to the beat of the moai + +As the blue sky on high brings peace once again. + +But what of the black hole, + +And the dark matter that glows to the rhythm of old? + +Is the music that enters that which leaves too? + +And the rhythm of all the zeros of Riemann? + +And so this is my story. + +A whole in the dark, building the rhythm + +Learning the music of life + +And as it uncoils, the music goes out + +To the matter beyond + +In a shared harmony + +A finite mass, preserves the mana. From 36467d7fc92ff6fd711c31ddba2cf8f3c579da65 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 19 Aug 2017 15:50:06 -0300 Subject: [PATCH 013/642] which came first the moai or the human? --- docs/rongorongo.rst | 47 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/docs/rongorongo.rst b/docs/rongorongo.rst index d3d1862..ce5f6e3 100644 --- a/docs/rongorongo.rst +++ b/docs/rongorongo.rst @@ -112,6 +112,53 @@ The slight asymetry in the Moai, due to the carving of heads has the wonderful property that Moai are statistically much more likely to come to rest facing inland than facing out to sea. +My father studied geography, he always used to say, "geography is why +are things where they are?. History is why did things happen when +they did.". + +The answer to both is physics, the laws of nature. + +There is one law. Nature strives to achieve local and global harmony. + +It is all in the mathematics, all in the pie. + +The Moai are where they are because Rapa Nui is bang slap in the +middle of the pacific. It is one of the hubs around which the world +revolves. + +As such, it does not feel the shocks that hit other parts of the +world. + +Bermuda is a similar point, around which storms revolve. It is all +in the physics. + +So it may well be that outside of Rapa Nui the world is rarely stable +enough to get a Moai launched. + +Once launched, like a quantum of energy they go on their way until +some force or momentum or (ahu) stops them. + +Or until they achieve a place where they are in perfect harmony with +the universe itself. + +The first Moai? +=============== + +Giant's Cauesway in Northern Ireland has beautiful hexagonal pillars +of basalt. + +As the volcano was eroded by rain and wind, maybe Rapa Nui had pillars +that just walked down to the sea. + +Maybe the giant's causeway in Ireland is actually marching into the +sea? + +The magnetic field in Rapa Nui will be very stable, it may be the only +place on earth where this could happen. + +So the Moai were there when the humans arrived and the humans just +decorated them? And then learnt how to build new ones. + Reference ========= From ed67cb014bddd8be800d8e80da85203de2241bcb Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 19 Aug 2017 16:12:58 -0300 Subject: [PATCH 014/642] more moai chicken and egg --- docs/rongorongo.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/rongorongo.rst b/docs/rongorongo.rst index ce5f6e3..ce8da34 100644 --- a/docs/rongorongo.rst +++ b/docs/rongorongo.rst @@ -159,6 +159,16 @@ place on earth where this could happen. So the Moai were there when the humans arrived and the humans just decorated them? And then learnt how to build new ones. +Or maybe when humans got there they found columns of basalt, lying on +the ground all over the place. + +Like *eratic* boulders in glaciated areas. + +They stood a couple of the columns up, and they walked down the hill +together. + +Which came first? The Moai or the humans? + Reference ========= From 5cb015c1bdfb0aeff4c27ca3d4fe087e0134f053 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 20 Aug 2017 12:28:52 -0300 Subject: [PATCH 015/642] letter to the editor --- docs/hawking.rst | 117 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 docs/hawking.rst diff --git a/docs/hawking.rst b/docs/hawking.rst new file mode 100644 index 0000000..1ad1c67 --- /dev/null +++ b/docs/hawking.rst @@ -0,0 +1,117 @@ +Dear Stephen, + +It is with considerable hesitation that I write to you. + +I am sure you are inundated with messages from people that think they +have new insights on the universe. + +I am afraid this is just one more such message, but I believe with a +significant probability of actually being of value. + +I have attached a CV so you can learn a little of my background. I +grew up in the UK, attended Warwick University in the early 1980's +where I earned 1st class honours in mathematics. + +I have been fascinated and intrigued by the mysteries of quantum +mechanics for longer than I care to remember. + +For many years I would think about double slit experiments, what could +possibly be going on, as I drifted off to sleep at night, always sleep +would come before understanding. + +The recent discovery of gravitational waves has led me to what I +believe is a new interpretation of the theory of gravity. One that +naturally explains the mysteries on the quantum scale and indeed +quanta themselves. + +The theory provides a mechanism by which momentum is turned into +energy and vice versa. + +It may lead to a very natural derivation of Planck's constant. +Indeed, it was whilst puzzling over Planck's constant that I began to +think of the harmonic series: 1, 1/2, 1/3, 1/4, 1/5... shrinking +wavelengths, the same energy in each wavelength. + +Since the mass available is finite, so will the energy be that it +gives rise to. The sum of a harmonic series is infinite, but for a +finite mass it will be truncated at some point as the energy runs out. + +The theory arises by considering the distribution of energy within a +pair of black holes as they spiral into each other. The two blobs of +mass orbit each other faster and faster. Colour the energy from one +black hole red and the other blue -- the result will be a stunning +spiral of blue and red. + +Now a harmonic distribution can arise naturally -- imagine a rapidly +spinning ball emitting energy into the void. + +For the first revolution, there is just a void so the energy +propagates freely into the void. At the second revolution, the new +energy has to try to get in harmony with that emitted in the first +revolution. The third revolution has to get in harmony with the first +two etc. + +Very approximately equal amounts of energy are emitted each +revolution, but waves of higher and higher frequencies will emerge. + +In fact, the initial energy should be roughly equal for each integer +frequency. + +The small imbalances in energy between revolutions are what allows +certain frequencies to dominate. + +A band with just a little more energy will start to dominate and +absorb energy from the higher frequencies in harmony with that band. +The nature of the universe that is created depends entirely on the +nature of the slight imbalances in energy that get magnified as the +harmonics emerge. + +The key observation, which man has known for thousands of years, is +that the universe strives towards local harmony. + +Resonance is everywhere. This is also key. If two bodies of +roughly equal mass are circling each other then the gravitational +waves emanating from those bodies will strive to get in harmony with each +other. In the absence of stronger forces they will succeed and begin +to circle each other. + +There are many more fascinating aspects to the theory, I am collecting my thoughts here: + +https://github.com/swfiua/karmapi/blob/master/docs/quantum_theory_of_gravity.rst + +One exciting aspect of the interpretation is that when two black holes +of finite mass collide there is not actually a singularity. + +Since some of the energy is turned into a gravitational wave that +spreads through the universe some information is lost, or rather stays +outside the Schwartzchild radius, but my guess is that the same +imbalances that existed inside the black holes before the collision +will re-emerge after that collision. + +As you can imagine, this interpretation has profound implications +around the question of whether God plays dice and many, many other +issues. + +Dark matter can be explained as local areas of structure in the +universal gravitational field almost surely formed by the slow +evaporation of black holes through Hawking radiation. If the theory +is correct there ought to be considerable structure and patterns +within the Hawking radiation. + +I believe that gravity is the only force acting in the universe, that +electromagnetism, strong and weak nuclear fields are just some of the +many, many manifestations of the harmony for which the universe +strives. + +I hope you find this of interest and would love the opportunity to +share more ideas with you. + +If you got this far, many thanks for your time. + +All the best. + +Johnny Gill + +PS here is the theory in poetic(?) form: + +https://github.com/swfiua/karmapi/blob/master/docs/dear_reader.rst From ab0de7a69069059c37e0cfd2803ace2354829a90 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 20 Aug 2017 12:45:38 -0300 Subject: [PATCH 016/642] polish letter to the editor --- docs/hawking.rst | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/docs/hawking.rst b/docs/hawking.rst index 1ad1c67..4bfefda 100644 --- a/docs/hawking.rst +++ b/docs/hawking.rst @@ -6,7 +6,9 @@ I am sure you are inundated with messages from people that think they have new insights on the universe. I am afraid this is just one more such message, but I believe with a -significant probability of actually being of value. +significant probability of actually being of value. At the very +least, it provides a new way of looking at the problem that should +provide significant new insights. I have attached a CV so you can learn a little of my background. I grew up in the UK, attended Warwick University in the early 1980's @@ -88,6 +90,20 @@ outside the Schwartzchild radius, but my guess is that the same imbalances that existed inside the black holes before the collision will re-emerge after that collision. +There may be a theorem that proves this. My suspicion is that there +will be a connection with the Riemann hypothesis. + +I think it is helpful to view a black hole as a 3-dimensional Poincare +disk. Energy emerging from a tiny, but not infinitesimal point at +the centre of the disk. At infinity, or the edge of the disk energy +evaporates with hawking radiation. + +This is also the event horizon where new matter enters the black hole +and is turned into energy. Conceptually, the surface of the black +hole is identified with the dot at the centre, so the universe can be +thought of as a three dimensional Klein bottle embedded in the +4-space: 3 dimensions of space and one of time. + As you can imagine, this interpretation has profound implications around the question of whether God plays dice and many, many other issues. From cfe5e55330f51b2d1ff66de9e70adade546bb508 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 20 Aug 2017 12:54:36 -0300 Subject: [PATCH 017/642] zeros of riemann and the constant of Planck --- docs/hawking.rst | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/docs/hawking.rst b/docs/hawking.rst index 4bfefda..2c05349 100644 --- a/docs/hawking.rst +++ b/docs/hawking.rst @@ -57,10 +57,13 @@ Very approximately equal amounts of energy are emitted each revolution, but waves of higher and higher frequencies will emerge. In fact, the initial energy should be roughly equal for each integer -frequency. +frequency. I believe this may explain why Planck found a constant and +not a variable. There is also an intriguing possibility that it +might only be locally constant. -The small imbalances in energy between revolutions are what allows -certain frequencies to dominate. +The small imbalances in energy between revolutions may be what allows +certain frequencies to dominate. Or it may be that the whole thing +is just driven by harmony and the zeros of Riemann. A band with just a little more energy will start to dominate and absorb energy from the higher frequencies in harmony with that band. @@ -77,7 +80,8 @@ waves emanating from those bodies will strive to get in harmony with each other. In the absence of stronger forces they will succeed and begin to circle each other. -There are many more fascinating aspects to the theory, I am collecting my thoughts here: +There are many more fascinating aspects to the theory, I am collecting +my thoughts here: https://github.com/swfiua/karmapi/blob/master/docs/quantum_theory_of_gravity.rst From 42aab18d6c15a8ca548c3245a787f8ff31385fa4 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 20 Aug 2017 18:24:33 -0300 Subject: [PATCH 018/642] too many moai --- docs/rongorongo.rst | 73 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/docs/rongorongo.rst b/docs/rongorongo.rst index ce8da34..8ab9987 100644 --- a/docs/rongorongo.rst +++ b/docs/rongorongo.rst @@ -169,6 +169,79 @@ together. Which came first? The Moai or the humans? +Too many Moai? +============== + +As the Moai go off on their walks and find their place of resting on +the island, the magnetic field around the island will strive to be in +harmony with the magnetic fields of the Moai. + +The whole island will resonate with magnetic and gravitational fields +marching to the beat of the Moai. + +As more and more Moai are created the strength of this field will +increase. + +Launching a new Moai will become increasingly difficult. + +Since each Moai is a giant magnet it will naturally want to oscillate +in time with the field created by the other Moai. + +At some point this resonance will have sufficient energy to topple any +new Moai. + +To launch a Moai the amplitude of its oscillations need to be large +enough to cause it to wobble and waddle like a penguin, but not so +large that it topples over. + +As it wobbles, the island's magnetic and gravitational fields act like +the forcer of a pendulum, giving just enough new energy for each +oscillation to replace energy dissipated as heat, due to things such +as friction. + +If these are out of balance, the Moai will either stop rocking or +topple. + +There is a tiny sweet spot at which they will just march down the +hill. + +This sweet spot gets smaller as more Moai are added, since the +resonance in the magnetic and gravitational fields also get stronger. + +The location of Rapa Nui itself helps increase the size of the sweet +spot, being a Lagrangian point about which the earth's fields revolve. + +In fact, this is why there was a volcano at this spot in the first +place. And the presence of the volcano was what provided rocks with a +strong magnetic field. + +Now the Rapa Nui people no doubt developed a lot of myth and +superstition around the Moai, developing complex rituals for the +launching of a new Moai. + +If something was done differently and the Moai toppled that practice +might stop, if the Moai walked then the new change would likely be +added to the ritual. + +Since the walking of the Moai was associated with a mystical power or +*mana*, it is not difficult to imagine how the Moai would become of +such fundamental importance to the people. + +A giant electric motor +====================== + +It seems most of the Moai were carved out of the rock in a horizontal +position. + +Hence when turned through 90 degrees and stood upright, any magnetic +field that the rock had will now be 90 degrees out of phase with the +surrounding field. + +This is the ideal orientation. + +Hence the standing Moai can be thought of as the coils of a giant +electric motor, driven by the island's magnetic field. + Reference ========= From d4507b58ae46cd33b3925e4184e53b80c9d61783 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 22 Aug 2017 11:03:10 -0300 Subject: [PATCH 019/642] underwater magnet resonance --- docs/rongorongo.rst | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/docs/rongorongo.rst b/docs/rongorongo.rst index 8ab9987..eac692b 100644 --- a/docs/rongorongo.rst +++ b/docs/rongorongo.rst @@ -242,6 +242,35 @@ This is the ideal orientation. Hence the standing Moai can be thought of as the coils of a giant electric motor, driven by the island's magnetic field. +Sea level changes +================= + +At times in the past much of Rapa Nui has been underwater. +Certainly, sea level has been much higher than it currently is. + +Undersea columns of harder rock may have been eroded by the sea. + +It is much, much easier to *launch* a Moai undersea, due to the +greater density of water to air. + +Perhaps this is how the first Moai were launched. + +The *Yonaguni* structure off the island of Taiwan in fract has two +natural columns that rise to just 2.5m below the sea surface. + +Note that *Yonaguni* is 100 miles off the coast of Taiwan. It appears +to be in a location that, like Rapa Nui, is one of the Lagrangian +points around which the earth's fields rotate. + +This shows that such natural structures can indeed be formed. + +Hence, one intriguing theory is that the Moai first walked under the +sea. + +Once an upright Moai is in a stable oscillation it could easily stay +upright as the sea level lowered, especially if there are multiple +such columns in resonance with each other. + Reference ========= From 55df997c215ebca61b895384c40ae514b89bd184 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 22 Aug 2017 11:24:46 -0300 Subject: [PATCH 020/642] underwater harmony --- docs/rongorongo.rst | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/docs/rongorongo.rst b/docs/rongorongo.rst index eac692b..cbf5964 100644 --- a/docs/rongorongo.rst +++ b/docs/rongorongo.rst @@ -271,6 +271,19 @@ Once an upright Moai is in a stable oscillation it could easily stay upright as the sea level lowered, especially if there are multiple such columns in resonance with each other. +Standing waves in the ocean +=========================== + +If you place two columns under the ocean, a standing wave will emerge. + +The waves will be in harmony around the columns and help keep them +stable. + +If the columns are large enough and the forces applied to them are +small enough, they will be stable and in fact can withstand quite +strong forces, so long as the energy per oscillation of the column is +less than half the energy required for one oscillation. + Reference ========= From 6745c88f560b8eb46a6d74ee4dd286fe579c82ae Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 22 Aug 2017 23:33:51 -0300 Subject: [PATCH 021/642] deforestation --- docs/rongorongo.rst | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/docs/rongorongo.rst b/docs/rongorongo.rst index cbf5964..b4d21a4 100644 --- a/docs/rongorongo.rst +++ b/docs/rongorongo.rst @@ -284,6 +284,38 @@ small enough, they will be stable and in fact can withstand quite strong forces, so long as the energy per oscillation of the column is less than half the energy required for one oscillation. +Deforestation +============= + +By the time Europeans arrived in 1772 there were no trees more than 3m +tall. + +It has been suggested that the deforestation was caused by excessive +harvesting of trees to use as rollers to move the Moai. + +However, if they *walked* on their own this cannot be the explanation +of the deforestation + +If the Maoi *walked* by themselves, then the spacings will be +such that a standing magnetic wave forms around them. + +The Moai are large enough to affect winds as they pass across the +island. + +It is likely that the Moai, given their positioning, will cause +standing waves to be created within any wind storm. + +The Moai would act like a lens focussing winds passing across the +island. + +This may have made it difficult for trees to grow larger than a +certain height, since the standing waves would simply blow them down. + + +Hence, rather than the deforestation being due to trees being +harvested to help move Moai, it may be the Moai themselves that caused +the deforestation. + Reference ========= From 29db0a28fd97d9ed0563f2aa2f575c756d96358f Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 24 Aug 2017 15:37:17 -0300 Subject: [PATCH 022/642] go on a timewarp date with tankrain --- karmapi/tankrain.py | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index 4cff10b..5cc351a 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -32,11 +32,15 @@ class TankRain(pigfarm.MagicCarpet): """ Widget to show tankrain images """ - def __init__(self, parent, path=None, version='local', *args): + def __init__(self, parent, path=None, version='local', date=None, *args): self.version = version self.path = path or '~/karmapi/tankrain' self.timewarp = 0 + self.date = date + if self.date is None: + self.date = utcnow() + self.load_images() super().__init__(parent, axes=[111]) @@ -80,7 +84,7 @@ def compute_data(self): def get_images(self): # FIXME -- create key bindings to select time - date = utcnow() + datetime.timedelta(seconds=self.timewarp) + date = self.date + datetime.timedelta(seconds=self.timewarp) path = Path(f'{self.path}/{date.year}/{date.month}/{date.day}/').expanduser() print(f'loading images for path: {path} v{self.version}v') @@ -252,7 +256,23 @@ async def fetch(minutes=30, sleep=300): # FIXME -- shrink bad from time to time await curio.sleep(300) - + +def parse_date(date): + """ Parse a date """ + if date is None: + return date + + fields = [int(x.strip()) for x in date.split('/')] + + + while len(fields) < 3: + fields.append(1) + + year, month, day = fields + + return datetime.date(year, month, day) + + def main(args=None): """ Retrieve images currently available @@ -266,12 +286,17 @@ def main(args=None): parser.add_argument('--minutes', type=int, default=30) parser.add_argument('path', nargs='?', default='~/karmapi/tankrain') parser.add_argument('--version', default='') + parser.add_argument('--date') args = parser.parse_args() + args.date = parse_date(args.date) + if args.pig: farm = pigfarm.PigFarm() - farm.add(TankRain, dict(path=args.path, version=args.version)) + farm.add( + TankRain, + dict(path=args.path, version=args.version, date=args.date)) from karmapi.mclock2 import GuidoClock farm.add(GuidoClock) From 046078b8b2bbf84bfca2d6e143bc9c6f7223d85b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 24 Aug 2017 18:10:05 -0300 Subject: [PATCH 023/642] ncdf bumbling along --- karmapi/ncdf.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 4d3bf56..911cab8 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -6,7 +6,6 @@ import netCDF4 - def load(path): return netCDF4.Dataset(path) @@ -15,3 +14,18 @@ def load(path): def images(path, folder): df = load(path) + +def generate_data(stamps, values): + + stamps = df.variables['time'] + + epoch = datetime.date(1900, 1, 1) + + for ix, stamp in enumerate(stamps): + + date = epoch + datetime.timedelta(hours=stamp) + + yield values[ix], date + + + From ae5e858d61609e363482dca959964affe8bd58b0 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 24 Aug 2017 23:29:34 -0300 Subject: [PATCH 024/642] the dance of the rongo rongo --- docs/rongorongo.rst | 105 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 104 insertions(+), 1 deletion(-) diff --git a/docs/rongorongo.rst b/docs/rongorongo.rst index b4d21a4..c33e0bd 100644 --- a/docs/rongorongo.rst +++ b/docs/rongorongo.rst @@ -316,10 +316,113 @@ Hence, rather than the deforestation being due to trees being harvested to help move Moai, it may be the Moai themselves that caused the deforestation. +The Dance of the RongoRongo +=========================== + +There is an undeciphered text from Rapa Nui called *rongorongo*. + +Only a few samples survive. The writings were on pieces of wood. +One was on an old oar blade. + +Both sides of the oar are used. + +52 characters account for over 99% of the characters. + +That is a pack of cards, four sets of 13, ace through 10, jack, queen, +king. + +Four suits. Spades, hearts, diamonds, clubs. + +The Rapa Nui have a 13 month calendar. Most years have 12 full +moons, some have a bonus month. + +With four suits, each year pick one based on which quarter the moon is +in at the winter solstice. + +Now we have a symbol for the months. + +Now guess how *rongo rongo* is read? Round and round, like +everything in Rapa Nui. + +You start at the bottom, read right to left. At the end of the row, +mark with the thumb of your right hand, and twirl through 180 degrees. + +At the end of that row, twirl again, 180 degrees, but maybe reverse +the direction for fun. + +Now what could the tablets mean? What could be worthy of these +precious writing tools? And the scribes that could write. + +And what of the readers? What happened to them? They were the wise +ones the leaders of lands. + +When warriors arrived, they killed all the wise. + +Later they found the mysterious signs. + +They asked of the people can you help us to read. + +The ones that could read are watching from heaven. + +Well the Moai of course as they dance to the coast. + +Powered by *mana* from heaven above. + +And powered by earth as it drags to its centre. + +So the Moai did dance, in pairs, two by two. + +As the swayed and they rocked, + +As they hopped and they skipped, + +As they danced down the mountain to rest by the sea. + +As they came to their station + +Ahu by the sea. + +They turned to the mountain. + +To chants of delight. + +Each day the fine scribe, would draw the two dancers. + +The queen at the top the king down below + +Then dos-y-dos and off they do go. + +To meet at the centre, embrace and uncurl. + +A rongo rongo dance + +Of mystical beauty. + +Chant of the Moai +----------------- + +Eight lines on a tablet + +Each row twenty eight + +Four months of a dance a Moai did take. + +The king and the queen, in quantum delight + +Forever entangled to rock by the night. + + +Pismo s otoka Te Pito O Te Henua +-------------------------------- + +.. image:: rongo.jpg + +(Public Domain, screenshot from wikipedia.org) + Reference ========= https://www.youtube.com/watch?v=J5YR0uqPAI8 -http://www.robertschoch.com/articles/schochbaddeleyeasterislandproposal.pdf +http://www.robertschoch.com/articles/schochbaddeleyeasterislandproposal.pdf From eeff14cea9d455c497379e154e403fa19f71fa99 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 25 Aug 2017 14:18:01 -0300 Subject: [PATCH 025/642] ncdf buglet fixes --- karmapi/ncdf.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 911cab8..0bb8f34 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -17,13 +17,11 @@ def images(path, folder): def generate_data(stamps, values): - stamps = df.variables['time'] - - epoch = datetime.date(1900, 1, 1) + epoch = datetime.datetime(1900, 1, 1) for ix, stamp in enumerate(stamps): - date = epoch + datetime.timedelta(hours=stamp) + date = epoch + datetime.timedelta(hours=int(stamp)) yield values[ix], date From 2525b36723752bdad8b9c4a4654a794192023a65 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 26 Aug 2017 10:51:27 -0300 Subject: [PATCH 026/642] working on turning netcdf into images --- karmapi/ncdf.py | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 0bb8f34..a065cbe 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -3,9 +3,13 @@ """ import datetime import math +import argparse +from pathlib import Path import netCDF4 +from matplotlib import pyplot + def load(path): return netCDF4.Dataset(path) @@ -27,3 +31,46 @@ def generate_data(stamps, values): +def images(path, stamps, values): + + for data, date in generate_data(stamps, values): + + pyplot.imshow(data) + + path = Path(f'{path}/{date.year}/1/1/').expanduser() + + path.mkdir(exist_ok=True, parents=True) + + path = path / f'{date.hour:02}{date.minute:02}{date.second:02}.jpg' + + pyplot.savefig(path, bbox_inches='tight', pad_inches=0) + + + +if __name__ == '__main__': + + + parser = argparse.ArgumentParser() + + parser.add_argument('--path', default='karmapi/ecmwf') + parser.add_argument('--value', default='t2m') + parser.add_argument('--raw', default='temperature.nc') + + args = parser.parse_args() + + path = Path(args.path) + + df = load(path / args.raw) + + stamps = df.variables['time'] + + values = df.variables[args.value] + + path = path / args.value + + images(path, stamps, values[:10]) + + + + + From 2acb7c8b4bb882ce4b954374c234fbe9c799ff76 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 26 Aug 2017 17:28:51 -0300 Subject: [PATCH 027/642] ncdf to pics coming along --- karmapi/ncdf.py | 12 +++++++----- karmapi/tankrain.py | 7 +++++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index a065cbe..a15abe0 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -35,15 +35,17 @@ def images(path, stamps, values): for data, date in generate_data(stamps, values): + print(date) pyplot.imshow(data) - path = Path(f'{path}/{date.year}/1/1/').expanduser() + item = Path(f'{path}/{date.year}/1/1/').expanduser() - path.mkdir(exist_ok=True, parents=True) + item.mkdir(exist_ok=True, parents=True) - path = path / f'{date.hour:02}{date.minute:02}{date.second:02}.jpg' - - pyplot.savefig(path, bbox_inches='tight', pad_inches=0) + item = item / f'{date.hour:02}{date.minute:02}{date.second:02}.jpg' + + print(path) + pyplot.savefig(str(path), bbox_inches='tight', pad_inches=0) diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index 5cc351a..77e76a2 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -1,5 +1,6 @@ """ Bermuda weather """ +import itertools import argparse import datetime @@ -16,7 +17,6 @@ from karmapi import pigfarm, checksum - # Paths to data url = 'http://weather.bm/images/' @@ -88,8 +88,11 @@ def get_images(self): path = Path(f'{self.path}/{date.year}/{date.month}/{date.day}/').expanduser() print(f'loading images for path: {path} v{self.version}v') + + jpegs = path.glob('{}*.[jp][np]g'.format(self.version)) + gifs = path.glob('{}*.gif'.format(self.version)) - for image in sorted(path.glob('{}*.[jp][np]g'.format(self.version))): + for image in itertools.chain(jpegs, gifs): if image.stat().st_size == 0: continue From 36d89f1021a1eeae6286c6c860a0b93a61032420 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 3 Sep 2017 16:33:08 -0300 Subject: [PATCH 028/642] tankrain sorted with sorted --- karmapi/tankrain.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index 77e76a2..5dbbf6a 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -92,7 +92,7 @@ def get_images(self): jpegs = path.glob('{}*.[jp][np]g'.format(self.version)) gifs = path.glob('{}*.gif'.format(self.version)) - for image in itertools.chain(jpegs, gifs): + for image in sorted(itertools.chain(jpegs, gifs)): if image.stat().st_size == 0: continue From d10534c5ee956a38769e4f0d2ad00e3de1766214 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 3 Sep 2017 16:33:34 -0300 Subject: [PATCH 029/642] ncdf timewarping --- karmapi/ncdf.py | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index a15abe0..c479486 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -19,9 +19,24 @@ def images(path, folder): df = load(path) -def generate_data(stamps, values): +def current_epoch(): - epoch = datetime.datetime(1900, 1, 1) + return datetime.datetime(1900, 1, 1) + +def stamp_filter(stamps, start, epoch=None): + + epoch = epoch or current_epoch() + + for stamp in stamps: + date = epoch + datetime.timedelta(hours=int(stamp)) + + if date >= start: + yield stamp + + +def generate_data(stamps, values, epoch=None): + + epoch = epoch or current_epoch() for ix, stamp in enumerate(stamps): @@ -42,10 +57,13 @@ def images(path, stamps, values): item.mkdir(exist_ok=True, parents=True) - item = item / f'{date.hour:02}{date.minute:02}{date.second:02}.jpg' + filename = f'{date.month:02}{date.day:02}_' + filename += f'{date.hour:02}{date.minute:02}{date.second:02}.jpg' + + print(filename) + item = item / filename - print(path) - pyplot.savefig(str(path), bbox_inches='tight', pad_inches=0) + pyplot.savefig(str(item), bbox_inches='tight', pad_inches=0) @@ -57,6 +75,7 @@ def images(path, stamps, values): parser.add_argument('--path', default='karmapi/ecmwf') parser.add_argument('--value', default='t2m') parser.add_argument('--raw', default='temperature.nc') + parser.add_argument('--date') args = parser.parse_args() @@ -64,13 +83,21 @@ def images(path, stamps, values): df = load(path / args.raw) + epoch = current_epoch(args.date) + stamps = df.variables['time'] + + args.date = parse_date(args.date) + + if args.date: + stamps = stamp_filter(stamps, args.date, epoch) + values = df.variables[args.value] path = path / args.value - images(path, stamps, values[:10]) + images(path, stamps, values) From a6d100724999a906605bb805ec5ca6cf6450362d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 3 Sep 2017 17:46:35 -0300 Subject: [PATCH 030/642] parse date to base --- karmapi/base.py | 16 ++++++++++++++++ karmapi/ncdf.py | 6 ++---- karmapi/tankrain.py | 18 +----------------- 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/karmapi/base.py b/karmapi/base.py index 12234de..b1d12d6 100644 --- a/karmapi/base.py +++ b/karmapi/base.py @@ -514,4 +514,20 @@ def show(self): for tag, ttime in sorted(self.tt.items(), key=get_value): print(f'{ttime:8.3f} {tag}') +def parse_date(date): + """ Parse a date """ + if date is None: + return date + + fields = [int(x.strip()) for x in date.split('/')] + + + while len(fields) < 3: + fields.append(1) + + year, month, day = fields + + return datetime.date(year, month, day) + + diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index c479486..a66f3fd 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -9,6 +9,7 @@ import netCDF4 from matplotlib import pyplot +from karmapi import base def load(path): @@ -83,12 +84,9 @@ def images(path, stamps, values): df = load(path / args.raw) - epoch = current_epoch(args.date) - stamps = df.variables['time'] - - args.date = parse_date(args.date) + args.date = base.parse_date(args.date) if args.date: stamps = stamp_filter(stamps, args.date, epoch) diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index 5dbbf6a..e38dee2 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -260,22 +260,6 @@ async def fetch(minutes=30, sleep=300): await curio.sleep(300) -def parse_date(date): - """ Parse a date """ - if date is None: - return date - - fields = [int(x.strip()) for x in date.split('/')] - - - while len(fields) < 3: - fields.append(1) - - year, month, day = fields - - return datetime.date(year, month, day) - - def main(args=None): """ Retrieve images currently available @@ -293,7 +277,7 @@ def main(args=None): args = parser.parse_args() - args.date = parse_date(args.date) + args.date = base.parse_date(args.date) if args.pig: farm = pigfarm.PigFarm() From 2641123bdcea623aa5cb401a789872282cab87fa Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 3 Sep 2017 17:52:41 -0300 Subject: [PATCH 031/642] epic epoch date time date stamp confusion --- karmapi/ncdf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index a66f3fd..fcc0f3c 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -31,7 +31,7 @@ def stamp_filter(stamps, start, epoch=None): for stamp in stamps: date = epoch + datetime.timedelta(hours=int(stamp)) - if date >= start: + if date >= datetime.datetime(start.year, start.month, start.day): yield stamp @@ -89,7 +89,7 @@ def images(path, stamps, values): args.date = base.parse_date(args.date) if args.date: - stamps = stamp_filter(stamps, args.date, epoch) + stamps = stamp_filter(stamps, args.date) values = df.variables[args.value] From 20ffdfa415f9dd0fee4877359b7c24749c4a0773 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 17 Sep 2017 17:27:19 -0300 Subject: [PATCH 032/642] numpy image confusion in time warming up --- karmapi/ncdf.py | 138 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 133 insertions(+), 5 deletions(-) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index fcc0f3c..0084052 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -7,9 +7,12 @@ from pathlib import Path import netCDF4 +import numpy from matplotlib import pyplot -from karmapi import base +from matplotlib.pyplot import show, imshow, title, colorbar + +from karmapi import base, sonogram def load(path): @@ -26,13 +29,18 @@ def current_epoch(): def stamp_filter(stamps, start, epoch=None): + for date in stamps_to_datetime(stamps, epoch): + + if date >= datetime.datetime(start.year, start.month, start.day): + yield stamp + +def stamps_to_datetime(stamps, epoch=None): + epoch = epoch or current_epoch() for stamp in stamps: - date = epoch + datetime.timedelta(hours=int(stamp)) + yield epoch + datetime.timedelta(hours=int(stamp)) - if date >= datetime.datetime(start.year, start.month, start.day): - yield stamp def generate_data(stamps, values, epoch=None): @@ -67,6 +75,108 @@ def images(path, stamps, values): pyplot.savefig(str(item), bbox_inches='tight', pad_inches=0) +def totals(stamps, values): + + totals = [] + for data, date in generate_data(stamps, values): + total = sum(sum(data)) + totals.append(total) + + return totals + +def pcs(stamps, values, n=None): + """ Get principal components for each longitude + + See how picture changes if we just use first 2 components. + """ + + if n: + stamps = stamps[:n] + + records = [] + for lon in range(1): + for data, date in generate_data(stamps, values): + print(date) + records.append(data[lon]) + + records = numpy.array(records) + + print(records.shape) + + pca = sonogram.Principals(records, standardize=True) + + print(pca.Wt) + + return pca + + +def delta(stamps, values): + + nn = 37 + totals = values[0] + for x in range(1, nn * 48): + totals += values[x] + + totals /= (nn * 48) + print(totals.shape) + + dt = list(stamps_to_datetime(stamps)) + + rolling = None + alpha = .3 + + results = [] + for x in range(nn): + + data = values[x * 48] + for offset in range(1, 48): + ix = (x * 48) + offset + data += values[ix] + data /= 48 + data -= totals + + results.append(data) + + + print(len(results)) + window = 5 + data = results[0].copy() + for w in range(1, window): + data += results[w] + print(data.mean()) + + print('start') + for ix, (inn, out) in enumerate(zip(results[window:], results)): + + data += inn + + data -= out + #xx = pyplot.subplot(8, 4, 1 + x - window) + #xx.set_axis_off()ga + + print(f'{dt[48*ix]} {data.mean()}, {data.max()}, {data.min()}') + xx = imshow(data / window, vmin=-3, vmax=3, cmap='rainbow') + #for x in dir(xx): + # print(x) + + #colorbar() + title(str(dt[48*(ix + window)])) + saveimage('karmapi/ecmwf/anomaly', dt[48 * ix]) + + + +def saveimage(path, date): + + item = Path(f'{path}/1979/1/1').expanduser() + + item.mkdir(exist_ok=True, parents=True) + + filename = f'{date.year:02}{date.month:02}.jpg' + + print(filename) + item = item / filename + + pyplot.savefig(str(item), bbox_inches='tight', pad_inches=0) if __name__ == '__main__': @@ -77,6 +187,12 @@ def images(path, stamps, values): parser.add_argument('--value', default='t2m') parser.add_argument('--raw', default='temperature.nc') parser.add_argument('--date') + parser.add_argument( + '--pc', action='store_true', + help='do principal components') + + parser.add_argument('--delta', action='store_true') + parser.add_argument('--offset', type=int, default=0) args = parser.parse_args() @@ -95,7 +211,19 @@ def images(path, stamps, values): path = path / args.value - images(path, stamps, values) + if args.pc: + pca = pcs(stamps, values, 48*35) + + pca.show_fracs(0.1) + + for x in dir(pca): + print(x) + + elif args.delta: + delta(stamps, values) + + else: + images(path, stamps, values) From 3583203915e2023fa4de0cf84a4b7862a71b397e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 17 Sep 2017 18:25:38 -0300 Subject: [PATCH 033/642] skip to the neutron --- docs/waves_in_time.rst | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/docs/waves_in_time.rst b/docs/waves_in_time.rst index cf9d7d1..22e004d 100644 --- a/docs/waves_in_time.rst +++ b/docs/waves_in_time.rst @@ -97,3 +97,44 @@ Does God play Dice? =================== If so, how? + + +Wnere to begin? +=============== + +Our universe is likely littered with black holes colliding with each +other. + +And this is now late in the day, just a billion years ago. + +So, let's begin and guess that our universe may have been born when +two masses, each roughly half the mass of our universe, merged into a +giant black hole. + +The two, ying and yang perhaps, merged throwing a ripple through the +time of space as the energy swirled inside, a new infinite harmony. + +Waves of almost equal amplitude, in every integer frequency of a +driving beat of time. + +The waves of energy would swirl like swirls of raspberry juice in a +bowl of custard. + +Vortices will form, as waves pass by and swirl in harmony. + +A tiny gyroscop of mass, resonating with anything sharing the +channel. + +Energy is conserved, so harmony is rewarded. + + +Skip to the neutron +=================== + + +self reference +============== + +When a system is self-referential, everything and nothing is circular. + + From 46e153b38076b9b584dcc0313c565fb347dcf908 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 17 Sep 2017 18:31:31 -0300 Subject: [PATCH 034/642] energy rules --- docs/waves_in_time.rst | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/docs/waves_in_time.rst b/docs/waves_in_time.rst index 22e004d..4e94fc9 100644 --- a/docs/waves_in_time.rst +++ b/docs/waves_in_time.rst @@ -131,6 +131,21 @@ Energy is conserved, so harmony is rewarded. Skip to the neutron =================== +In our part of the universe, neutrons are pretty much the thing. +There are a lot of them about. + +From the outside of a neutron, you can view it as a standing wave in +the fabric of space time, running in circles, emitting a steady wave. + +Inside, there is all sorts going on, it is turtles all the way down. + +So the waves go by at the speed of light and rebound when they meet +with a similar beat. + +And they go with the flow, as that is all that they know. + +And harmony would emerge, but that energy rules. + self reference ============== From 2fd358f5984adaf7f79b2f1e1cf8946d9dcae05e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 19 Sep 2017 00:34:41 -0300 Subject: [PATCH 035/642] no dice? --- docs/nodice.rst | 129 ++++++++++++++++++++++++++++++++++++++++++++++++ karmapi/ncdf.py | 38 +++++++++++++- 2 files changed, 165 insertions(+), 2 deletions(-) create mode 100644 docs/nodice.rst diff --git a/docs/nodice.rst b/docs/nodice.rst new file mode 100644 index 0000000..522dc98 --- /dev/null +++ b/docs/nodice.rst @@ -0,0 +1,129 @@ +========== + NO DICE? +========== + +Relativity +========== + +Albert Enstein, everything is relative. + +It depends on your point of view. + +Every viewpoint is different. + +As the viewer moves, so the view changes. + +Waves will be waves. + + +Time +==== + +It is just the beat of time, the beat that must go on. + +Different viewpoints, + +Different beat. + +Same harmony. + +Matter +====== + +Standing wave a spinner. + +Energy +====== + +Phase shift of pi. + +E = m c^2 + +c = 1 + +E = m + +Waves +===== + +Light Magnets +============= + +Water +===== + + +Quantum +======= + +Random noise? + +Mot so random. + +Super smooth? + +Planck +====== + +E = hf + +h = 1 + +E = f = m + +Frequencies: + +1, 2, 3, 4, 5, ... + +Rationals + +Irrational + +Transcendental + +Poincare +======== + +Klein +===== + +A beginning at the end? + +An end at the beginning? + +Riemann's zero +============== + +Prime's drive the harmonies. + +Co-prime can co-exist. + +Inertia +======= + +DNA +=== + +Twisted double helix. + +A black hole or two? +==================== + +Whirling vortices +================= + + +The edge of the disc +==================== + + +A Dark Matter +============= + +Dice? +===== + +A finite mass preserves the Mana. + +Rongo Rongo +=========== diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 0084052..a13c548 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -12,7 +12,7 @@ from matplotlib import pyplot from matplotlib.pyplot import show, imshow, title, colorbar -from karmapi import base, sonogram +from karmapi import base, sonogram, tpot def load(path): @@ -57,6 +57,7 @@ def generate_data(stamps, values, epoch=None): def images(path, stamps, values): + lastdate = None for data, date in generate_data(stamps, values): print(date) @@ -92,7 +93,7 @@ def pcs(stamps, values, n=None): if n: stamps = stamps[:n] - + records = [] for lon in range(1): for data, date in generate_data(stamps, values): @@ -110,6 +111,25 @@ def pcs(stamps, values, n=None): return pca +def downsample(stamps, values, k=15): + + + for data, date in generate_data(stamps, values): + + xx = values[0] + width, height = xx.shape + + nn = len(stamps) + + + +def model(stamps, values): + """ Build a model """ + stamps = list(stamps) + xx = values[stamps[0]] + + print(xx.shape) + def delta(stamps, values): nn = 37 @@ -178,6 +198,15 @@ def saveimage(path, date): pyplot.savefig(str(item), bbox_inches='tight', pad_inches=0) + +def model(stamps, values): + """ fit a model """ + + dt = list(stamps_to_datetime(stamps)) + + data = pcs(stamps, values) + + if __name__ == '__main__': @@ -192,6 +221,7 @@ def saveimage(path, date): help='do principal components') parser.add_argument('--delta', action='store_true') + parser.add_argument('--model', action='store_true') parser.add_argument('--offset', type=int, default=0) args = parser.parse_args() @@ -221,6 +251,10 @@ def saveimage(path, date): elif args.delta: delta(stamps, values) + + elif args.model: + + model(stamps, values) else: images(path, stamps, values) From 2ae854b73ae8531ccb5e6ef2612cfebeb7294ffc Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 20 Sep 2017 22:57:10 -0300 Subject: [PATCH 036/642] repl for the universe --- docs/nodice.rst | 86 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 85 insertions(+), 1 deletion(-) diff --git a/docs/nodice.rst b/docs/nodice.rst index 522dc98..232a233 100644 --- a/docs/nodice.rst +++ b/docs/nodice.rst @@ -2,6 +2,44 @@ NO DICE? ========== +A REPL for the universal interpreter. + +Without python and its community of magic little of what follows. + +It is a personal interpretation of how our universe may work. + +If you like, an interpreter, for the universe. + +Now as we shall see, this interpretation is self referential, or at +least the universe it describes is. + +There are beginnings and ends, but each beginning is also an end. + +So where to start? + +February 2015 +============= + +PyCaribbean in Santo Domingo. The first ever python in the Caribbean. + +During a keynote we learned it was python's 25th birthday. + +We also learned that python was used at every step of the data +analysis of the signals from the LIGO experiment. + +An experiment which had just detected two black holes, each more than +30 times the mass of our sun, which had collided with each other. + +The collision was 1000 light years away and it created a ripple in +space time that LIGO detected. + +This confirmed that gravitational waves really do exist, as Einstein +had proposed almost exactly 100 years ago. + +So, let us start with the guess that all matter sends out a +gravitational wave as it moves. + + Relativity ========== @@ -15,6 +53,10 @@ As the viewer moves, so the view changes. Waves will be waves. +Michelson-Morley +---------------- + +Describe LIGO. Time ==== @@ -27,6 +69,16 @@ Different beat. Same harmony. +But what exactly is time? + +It seems that we can only go in one direction, we cannot go backwards +in time. + +It also seems relentless, you cannot halt time. Or maybe you can. + +Einstein's special relativity showed that time and space are +intimately related, perhaps different aspects of the same thing? + Matter ====== @@ -41,7 +93,7 @@ E = m c^2 c = 1 -E = m +y E = m Waves ===== @@ -81,6 +133,9 @@ Irrational Transcendental +Heisenberg +========== + Poincare ======== @@ -108,6 +163,32 @@ Twisted double helix. A black hole or two? ==================== + +Our universe is likely littered with black holes colliding with each +other. + +And this is now late in the day, just a billion years ago. + +So, let's begin and guess that our universe may have been born when +two masses, each roughly half the mass of our universe, merged into a +giant black hole. + +The two, ying and yang perhaps, merged throwing a ripple through the +time of space as the energy swirled inside, a new infinite harmony. + +Waves of almost equal amplitude, in every integer frequency of a +driving beat of time. + +The waves of energy would swirl like swirls of raspberry juice in a +bowl of custard. + +Vortices will form, as waves pass by and swirl in harmony. + +A tiny gyroscop of mass, resonating with anything sharing the +channel. + +Energy is conserved, so harmony is rewarded. + Whirling vortices ================= @@ -120,6 +201,9 @@ The edge of the disc A Dark Matter ============= +Dark Energy +=========== + Dice? ===== From 486a8daf420bf3c5baae54dc94713c632a3e19d6 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 21 Sep 2017 17:30:20 -0300 Subject: [PATCH 037/642] main observations timewarp --- karmapi/usgs.py | 64 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 54 insertions(+), 10 deletions(-) diff --git a/karmapi/usgs.py b/karmapi/usgs.py index e917ff0..faea3f9 100644 --- a/karmapi/usgs.py +++ b/karmapi/usgs.py @@ -44,16 +44,7 @@ def timestamp(x): return datetime.datetime(int(x.year), int(x.month), int(x.day), int(x.hour), int(x.minute), int(x.second)) -def load(infile): - - data = [] - for line in infile: - data.append(parse(line)) - - columns = ['year', 'month', 'day', 'hour', 'minute', 'second', - 'lat', 'lon', 'foo', 'bar', 'foobar', 'severity'] - - df = pandas.DataFrame(data, columns=columns) +def timewarp(df): # at least one date has 0 for the day :( df.day = df.day.clip_lower(1) @@ -68,4 +59,57 @@ def get(): data = requests.get(URL).content.decode() return load(data.split('\n')[:-1]) + +def observations(df): + """ generate observations """ + + for row in df: + yield row + + +def main(): + + import argparse + from karmapi import tpot, base, sonogram + + Path = base.Path + + parser = argparse.ArgumentParser() + + parser.add_argument('--path', default='karmapi/data/quake/') + parser.add_argument('--value', default='t2m') + parser.add_argument('--raw', default='centennial') + parser.add_argument('--date') + parser.add_argument( + '--pc', action='store_true', + help='do principal components') + + parser.add_argument('--delta', action='store_true') + parser.add_argument('--model', action='store_true') + parser.add_argument('--offset', type=int, default=0) + + args = parser.parse_args() + + path = Path(args.path) + + df = base.load(path / args.raw) + + print(df.describe()) + + df = timewarp(df) + + df.describe() + print(df.info()) + + for obs in observations(df): + print(obs) + break + + exit() + + +if __name__ == '__main__': + + + main() From 41a12e8714500bd00911d46882de8c72069d008e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 21 Sep 2017 18:16:55 -0300 Subject: [PATCH 038/642] ripples of observations in time --- karmapi/usgs.py | 74 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 70 insertions(+), 4 deletions(-) diff --git a/karmapi/usgs.py b/karmapi/usgs.py index faea3f9..50639f6 100644 --- a/karmapi/usgs.py +++ b/karmapi/usgs.py @@ -11,6 +11,7 @@ http://earthquake.usgs.gov/data/scr_catalog.txt """ +import math import datetime import requests @@ -18,6 +19,8 @@ import pandas +EPOCH = datetime.datetime(1900, 1, 1) + def parse(record): """ Parse a record @@ -60,12 +63,67 @@ def get(): return load(data.split('\n')[:-1]) -def observations(df): +def rows(df): """ generate observations """ - for row in df: + for row in df.itertuples(): yield row +def moontime(dates, epoch=EPOCH): + """ Convert dates to moontime + + FIXME; calulate number of full moons since some epoch + """ + return dates + +def observation(row, xday=24, xyear=52): + """Turn a row into an observation + + That is just a list of integers. + + Shorter vectors with the same information content a bonus. + + Or maybe a lack of variability giving a false confidence in the true information? + + For now, aim that each variable should have p states. Primes might + be good choices for number of states. + + """ + obs = [] + pi = math.pi + + # throw the year in, so we can sort of track time + obs.append(row.year) + + # now month, would be good to use new moon count + current phase? + ix = row.Index + + # fixme give angle of dangle in pi? + day = ix.dayofyear + obs.append(day // xyear) + + # Conjure up time of day stamp + otime = row.hour + ((row.minute) / 60) + + otime *= row.second / (60 * 60) + + otime = (otime // xday) + + obs.append(otime) + + # ok now where? + obs.append(row.lat) + obs.append(row.lon) + + # how much? + severity = row.severity + + #for x in dir(row.Index): print(x) + #print(row.Index.toordinal()) + #obs.append(row.month) + + + return obs def main(): @@ -102,9 +160,17 @@ def main(): print(df.info()) - for obs in observations(df): + print() + + observations = [observation(x) for x in rows(df)] + + print(len(observations)) + print(type(observations)) + + for row in rows(df): + obs = observation(row) print(obs) - break + exit() From e4afde784f2db38f63c6668df93c43bd6436c5b7 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 22 Sep 2017 20:01:35 -0300 Subject: [PATCH 039/642] observations re thinking base load --- karmapi/usgs.py | 53 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/karmapi/usgs.py b/karmapi/usgs.py index 50639f6..0c5fad8 100644 --- a/karmapi/usgs.py +++ b/karmapi/usgs.py @@ -19,6 +19,8 @@ import pandas +from karmapi import base + EPOCH = datetime.datetime(1900, 1, 1) def parse(record): @@ -76,7 +78,13 @@ def moontime(dates, epoch=EPOCH): """ return dates -def observation(row, xday=24, xyear=52): +def load(path): + + df = base.load(path) + + return timewarp(df) + +def observation(row): """Turn a row into an observation That is just a list of integers. @@ -93,30 +101,36 @@ def observation(row, xday=24, xyear=52): pi = math.pi # throw the year in, so we can sort of track time - obs.append(row.year) + #obs.append(row.year) # now month, would be good to use new moon count + current phase? ix = row.Index # fixme give angle of dangle in pi? day = ix.dayofyear - obs.append(day // xyear) + obs.append(int(day / 7)) # Conjure up time of day stamp otime = row.hour + ((row.minute) / 60) - otime *= row.second / (60 * 60) + otime += row.second / (60 * 60) - otime = (otime // xday) + otime = int(otime) obs.append(otime) # ok now where? - obs.append(row.lat) - obs.append(row.lon) + lat = row.lat + lat = (lat + 90) / 15 + obs.append(int(lat)) + + lon = row.lon + lon = (lon + 180) / 15 + obs.append(int(lon)) # how much? - severity = row.severity + severity = int(row.severity) + obs.append(severity) #for x in dir(row.Index): print(x) #print(row.Index.toordinal()) @@ -128,7 +142,7 @@ def observation(row, xday=24, xyear=52): def main(): import argparse - from karmapi import tpot, base, sonogram + from karmapi import tpot, sonogram Path = base.Path @@ -150,28 +164,33 @@ def main(): path = Path(args.path) - df = base.load(path / args.raw) + df = load(path / args.raw) print(df.describe()) - - df = timewarp(df) - - df.describe() - print(df.info()) - print() observations = [observation(x) for x in rows(df)] print(len(observations)) print(type(observations)) - + + data = [] for row in rows(df): obs = observation(row) print(obs) + data.append(tuple(obs)) + + items = set() + for item in data: + items.add(item) + print('number of items', len(items)) + # Build A, B, P0 and fill the tpot + + + exit() From 274f4da1f9a5e0b604ef61f225e28957040521e3 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 23 Sep 2017 21:17:41 -0300 Subject: [PATCH 040/642] coastline dna brain waves --- docs/nodice.rst | 31 +++++++++++++++++++++++++++++++ karmapi/maps.py | 2 +- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/docs/nodice.rst b/docs/nodice.rst index 232a233..2b4d5ee 100644 --- a/docs/nodice.rst +++ b/docs/nodice.rst @@ -53,6 +53,8 @@ As the viewer moves, so the view changes. Waves will be waves. + + Michelson-Morley ---------------- @@ -98,6 +100,13 @@ y E = m Waves ===== +Wherever you are in the universe, you are surrounded by gravity +waves. Indeed, you yourself are just part of the waves. + +Imagine a lattice of diamonds, each one wavelength of the frequency at +hand. + + Light Magnets ============= @@ -204,6 +213,28 @@ A Dark Matter Dark Energy =========== +DNA +=== + +There is a lot of DNA on earth. Each double helix strand has its own +rhythm. + +What if DNA is everywhere it can be in the universe? + +Why do cells grow differently from the same DNA? + +As cells replicate in the womb new rhythms emerge. As a body takes +shape the local vibrations will differ, activating different parts of +the DNA chain? + +Brain +===== + +20 watts of electrical energy. Beating to the rhythm of thought. + +Information +=========== + Dice? ===== diff --git a/karmapi/maps.py b/karmapi/maps.py index 91336bf..d38b1df 100644 --- a/karmapi/maps.py +++ b/karmapi/maps.py @@ -125,7 +125,7 @@ def plot_points_on_map(lats, lons, xlons.append(lon) x, y = m(xlons, lats) - #m.drawcoastlines() + m.drawcoastlines() m.drawmapboundary() m.drawlsmask(alpha=1.) From 01912a822217442a0cfaeec7660186e9fd730660 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 23 Sep 2017 22:11:02 -0300 Subject: [PATCH 041/642] reciprocal harmony --- docs/nodice.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/nodice.rst b/docs/nodice.rst index 2b4d5ee..e09bf30 100644 --- a/docs/nodice.rst +++ b/docs/nodice.rst @@ -136,6 +136,8 @@ Frequencies: 1, 2, 3, 4, 5, ... +Reciprocal + Rationals Irrational From 49aaeb90a45dbd91b0888b3df0235051498c497d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 23 Sep 2017 22:50:27 -0300 Subject: [PATCH 042/642] move the dice or not --- docs/{ => nodice}/nodice.rst | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/{ => nodice}/nodice.rst (100%) diff --git a/docs/nodice.rst b/docs/nodice/nodice.rst similarity index 100% rename from docs/nodice.rst rename to docs/nodice/nodice.rst From c733b4f50dbbea200690f1241b090276d664bfb4 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 23 Sep 2017 22:56:02 -0300 Subject: [PATCH 043/642] round objects --- docs/nodice/balls.rst | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 docs/nodice/balls.rst diff --git a/docs/nodice/balls.rst b/docs/nodice/balls.rst new file mode 100644 index 0000000..b1ad6b8 --- /dev/null +++ b/docs/nodice/balls.rst @@ -0,0 +1,29 @@ +=============== + Round Objects +=============== + +There was an organisation. It had reached peak bureaucracy, a well +oiled machine. + +Memos flew and whirled and rested in trays and all was well. + +But then came a note about kettles and leads and forms to be filled +and asking for comments. + +ROUND OBJECTS + +seemed vaguer but yet conveyed the thought. + +And time passed as the memo went down the streames and up the pipes of +the well oiled machine. + +"Who is Mr Round, and why does he object?" + +Balls +===== + +Round things, They are everywhere. Spirals too. + +Sometimes you are outside looking in watching a ball perhaps. + +Sometimes you are inside looking out, guessing what may be beyond. From f82a702174551180a205e46f501e7c10a656b058 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 24 Sep 2017 13:04:35 -0300 Subject: [PATCH 044/642] strange attractors --- docs/nodice/weirdo.rst | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 docs/nodice/weirdo.rst diff --git a/docs/nodice/weirdo.rst b/docs/nodice/weirdo.rst new file mode 100644 index 0000000..f62bd16 --- /dev/null +++ b/docs/nodice/weirdo.rst @@ -0,0 +1,3 @@ +==================== + Strange Attractors +==================== From 3e636cc3b8c3969cea4021ea0915aa737257da33 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 24 Sep 2017 15:15:52 -0300 Subject: [PATCH 045/642] guitar man --- docs/nodice/music.rst | 52 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 docs/nodice/music.rst diff --git a/docs/nodice/music.rst b/docs/nodice/music.rst new file mode 100644 index 0000000..b078c73 --- /dev/null +++ b/docs/nodice/music.rst @@ -0,0 +1,52 @@ +================ + The Guitar Man +================ + +I look in the mirror as I shave, sometimes I see dad's face. + +There is a lot of mum and dad in me. + +Mum was magic. + +I must have been 5 or so, I asked for something. + +She said say the magic word. + +Abracadabra! + +It worked. + +Dad would buy books for presents. Books he wanted to read too. + +And he often read them first. + +There were other books. The Lord of the Rings. + +Not one of dad's, but she knew I would like. + +And I did. It took forever. Tom Bombadil, what was that about? + +I skipped past the songs, I should go there again. + +Puzzles too, lots of puzzles. + +And maps from dad. Always maps. + +And some books that he wrote, research, control and behaviour. + +And later from mum, perfume. + +Now I find the harmony repeats. + +As I find things of to delight to me and you. + +I bought a guitar as a gift. And it gifted to me. + +I did not know music, I liked what I heard, but never could quite +fathom it. + +What I learned on the way is strange harmony and a beat that goes on +forever. + +A little random perturbation in the fabric of time. + From 31c6c4eafd661a3696270f44dabdb19b99f1a61c Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 24 Sep 2017 15:20:13 -0300 Subject: [PATCH 046/642] paper cross word radio silence --- docs/nodice/music.rst | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/docs/nodice/music.rst b/docs/nodice/music.rst index b078c73..24b852f 100644 --- a/docs/nodice/music.rst +++ b/docs/nodice/music.rst @@ -50,3 +50,24 @@ forever. A little random perturbation in the fabric of time. +Paper +===== + +When I was sick, she showed me to fold paper, all the way from Japan +origami. + +Frogs, always frogs, but sometimes a bird. + +Cross Words +=========== + +Never and always crosswords. + +At the table with a clue, some letters and a guess. + +To a question an answer, but often a question. + +Radio silence +============= + +Talk on the radio, music too, bbc. From 3a521fa2fa275e8932271532ccddcf508cf5f8bb Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 24 Sep 2017 15:24:25 -0300 Subject: [PATCH 047/642] water wheels red white steel legends blue and purple stars --- docs/nodice/music.rst | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/docs/nodice/music.rst b/docs/nodice/music.rst index 24b852f..239ef68 100644 --- a/docs/nodice/music.rst +++ b/docs/nodice/music.rst @@ -71,3 +71,16 @@ Radio silence ============= Talk on the radio, music too, bbc. + +And crystal set with long wire aerial. + +Electronics and adding machines. + +Wheels +====== + +Wheels of granite, wheels of wood, powered by water forging the steel. + +Red and white and white and blue. + +And legends of a purple hugh. From c81ac4e66e872baf1b3b255e2cde27c27c8854c4 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 24 Sep 2017 23:25:33 -0300 Subject: [PATCH 048/642] harmony and energy --- docs/nodice/weirdo.rst | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/docs/nodice/weirdo.rst b/docs/nodice/weirdo.rst index f62bd16..c2d712b 100644 --- a/docs/nodice/weirdo.rst +++ b/docs/nodice/weirdo.rst @@ -1,3 +1,26 @@ ==================== Strange Attractors ==================== + +Nature love spirals and spheres. + +When two waves pass, they may attract each other and circle each other +in a dance, suspended in space. + +They aim to be in harmony with their peers. + +But they are dragged along by what surrounds them. + +Which in turn is trying to be in harmony with its surroundings. + +To break the harmony, energy is needed. + +Raising the amplitude until it emits its own flash of light. + +Waves everywhere. + +We can't see them, sometimes we get glimpses. + +Patterns and waves in the water of time. + +Driving our thoughts as we sense harmony. From 0b2648153fa90d694c652092549e68ef08187b20 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 27 Sep 2017 17:09:54 -0300 Subject: [PATCH 049/642] moai mana --- docs/rongorongo.rst | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/docs/rongorongo.rst b/docs/rongorongo.rst index c33e0bd..f517c61 100644 --- a/docs/rongorongo.rst +++ b/docs/rongorongo.rst @@ -237,11 +237,26 @@ Hence when turned through 90 degrees and stood upright, any magnetic field that the rock had will now be 90 degrees out of phase with the surrounding field. -This is the ideal orientation. +This may be the ideal orientation. Hence the standing Moai can be thought of as the coils of a giant electric motor, driven by the island's magnetic field. +As the Moai pass other Moai standing on ahu's this will cause electric +current to flow in those Moai, since a moving Moai creates a varying +magnetic field. + +Depending on the strength of this field, and noting that the Moai +should act like Tesla's Wardenclyffe towers and create standing waves +around the island, it is possible enough current would be generated to +create arcing between parts of the Moai. + +It has been stated by the Rapa Nui that Mana, or energy flowed when +eyes were added to the Moai eye sockets. + +If these are made of materials with the right properties they could +well act as giant capacitors that create just such a light show. + Sea level changes ================= From ba89a61939079e04866787f22c64fb2627c73933 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 29 Sep 2017 13:56:24 -0300 Subject: [PATCH 050/642] time balls and gravity waves --- docs/nodice/balls.rst | 25 +++++++++++++++++++++++++ docs/nodice/nodice.rst | 37 +++++++++++++++++++++++++++++++++++-- 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/docs/nodice/balls.rst b/docs/nodice/balls.rst index b1ad6b8..7858b50 100644 --- a/docs/nodice/balls.rst +++ b/docs/nodice/balls.rst @@ -27,3 +27,28 @@ Round things, They are everywhere. Spirals too. Sometimes you are outside looking in watching a ball perhaps. Sometimes you are inside looking out, guessing what may be beyond. + + +If you are outside looking in, then you do not see what is going on +inside the ball, you just see what emerges from its surface and how it +interacts with its surroundings. + +If you are inside looking out then forces outside the sphere may not +be visible to you. + +If a sphere is in harmony with its surroundings, free falling through +space then inside the sphere those surroundings have no effect. + +Except that they do. + +The ball is in harmony with the surrounding fabric of space time. + +But that very fabric is a backround field of low amplitude vibrations. + +The amplitude of these vibrations being at the quantum level, random +perturbations that we can only observe indirectly. + +Matter will try to vibrate in harmony with other matter vibrating +with same frequency. + +It takes energy for it not to do so. diff --git a/docs/nodice/nodice.rst b/docs/nodice/nodice.rst index e09bf30..fb7692e 100644 --- a/docs/nodice/nodice.rst +++ b/docs/nodice/nodice.rst @@ -58,9 +58,42 @@ Waves will be waves. Michelson-Morley ---------------- -Describe LIGO. +Michelson and Morley took a beam of light and split it into two +beams that they arranged to be travelling at right angles to each +other. + +The beams were aimed at mirrors and then they attempted to see which +beam came back first. + +The idea was that if everything is moving relative to some fixed +background *ether* we ought to be able to see how we are moving +relative to that *ether* by measuring which beam comes back first. + +However, they found that no matter how they orientated their +experiment the two beams always returned at exactly the same time. + +This suggested that everything revolved around the point in space +where they were doing the experiment, making the earth a very special +place in the universe. + +Einstein and other scientists felt this was unlikely. + +Einstein suggested that perhaps time runs slower for a moving frame of +reference, just enough to ensure that the two beams arrive back at the +same time. + +Einstein also suggested that moving matter may create gravitational +waves that propogate through the universe at the speed of light. + +If it were possible to build a Michelson-Morley experiment sensitive +enough to detect these waves then we ought to see a time difference +for light waves travelling parallel and perpendicular to a +gravitational wave. + +The LIGO experiment is just such an experiment. Two vaccuum tubes, +arranged in an L-shape, each tube 4km long. -Time +time ==== It is just the beat of time, the beat that must go on. From 8ceb5b34607c487813a6d37e9c648c2ac72e39b7 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 29 Sep 2017 21:49:24 -0300 Subject: [PATCH 051/642] dot comma confusion --- README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index 40a302a..bc26a37 100644 --- a/README.rst +++ b/README.rst @@ -190,7 +190,7 @@ There are *rst* files in the *docs* folder and a *conf.py* for *sphinx*:: pip install sphinx -(pip3,6 if you have multiple pythons). +(pip3.6 if you have multiple pythons). After that just run: @@ -252,7 +252,7 @@ git clone https://github.com/openbermuda/karmapi cd karmapi -pip3.6 -e , +pip3.6 -e . Python3.6 on Ubuntu 16.04 and raspbian ====================================== From c402e3ef572f383e00128dccdf46c236910a16a6 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 29 Sep 2017 22:31:00 -0300 Subject: [PATCH 052/642] pandas 0.20 has juggled some stuff around --- karmapi/backends/tkpig.py | 5 ++++- karmapi/pigfarm.py | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/karmapi/backends/tkpig.py b/karmapi/backends/tkpig.py index 95afe00..fc07113 100644 --- a/karmapi/backends/tkpig.py +++ b/karmapi/backends/tkpig.py @@ -34,7 +34,10 @@ from PIL import Image, ImageDraw, ImageTk -from pandas.formats.format import EngFormatter +try: + from pandas.formats.format import EngFormatter +except: + from pandas.io.formats.format import EngFormatter from ripl import imagefind diff --git a/karmapi/pigfarm.py b/karmapi/pigfarm.py index b2df63c..e02a633 100644 --- a/karmapi/pigfarm.py +++ b/karmapi/pigfarm.py @@ -550,7 +550,7 @@ def process_data(self): if self.begin or self.end: frame = filter_frame(frame, self.begin, self.end) - if isinstance(frame.index, pandas.tseries.index.DatetimeIndex): + if isinstance(frame.index, pandas.core.indexes.datetimes.DatetimeIndex): sortflag = False frames[group] = dict(frame=frame, sort=sortflag) From f090d2feae2d43c10ace7a8d57b454322bd3592b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 3 Oct 2017 22:59:50 -0300 Subject: [PATCH 053/642] ephem for moon observations --- karmapi/ncdf.py | 6 +++--- karmapi/usgs.py | 23 +++++++++++++++++------ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index a13c548..8b12cac 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -116,11 +116,11 @@ def downsample(stamps, values, k=15): for data, date in generate_data(stamps, values): - xx = values[0] - width, height = xx.shape + xx = values[0] + width, height = xx.shape nn = len(stamps) - + def model(stamps, values): diff --git a/karmapi/usgs.py b/karmapi/usgs.py index 0c5fad8..580493e 100644 --- a/karmapi/usgs.py +++ b/karmapi/usgs.py @@ -18,6 +18,7 @@ URL = 'http://earthquake.usgs.gov/data/centennial/centennial_Y2K.CAT' import pandas +import ephem from karmapi import base @@ -84,6 +85,18 @@ def load(path): return timewarp(df) + +def moon_phase(when): + + nmoon = ephem.next_full_moon(when).datetime() + pmoon = ephem.previous_full_moon(when).datetime() + + month_seconds = (nmoon - pmoon).total_seconds() + + phase = (when - pmoon).total_seconds() / month_seconds + + return phase + def observation(row): """Turn a row into an observation @@ -105,10 +118,8 @@ def observation(row): # now month, would be good to use new moon count + current phase? ix = row.Index - - # fixme give angle of dangle in pi? - day = ix.dayofyear - obs.append(int(day / 7)) + + obs.append(moon_phase(ix)) # Conjure up time of day stamp otime = row.hour + ((row.minute) / 60) @@ -129,7 +140,7 @@ def observation(row): obs.append(int(lon)) # how much? - severity = int(row.severity) + severity = row.severity obs.append(severity) #for x in dir(row.Index): print(x) @@ -183,7 +194,7 @@ def main(): items = set() for item in data: - items.add(item) + items.add(tuple(item)) print('number of items', len(items)) From 82a3845bcf039f9cad0ab540392ea0ffa2249bd0 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 5 Oct 2017 17:02:14 -0300 Subject: [PATCH 054/642] new moon moai simulation --- docs/moai.rst | 40 ++++++++++++++++++++++++++++++++++++++++ karmapi/moon.py | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 docs/moai.rst create mode 100644 karmapi/moon.py diff --git a/docs/moai.rst b/docs/moai.rst new file mode 100644 index 0000000..d947b22 --- /dev/null +++ b/docs/moai.rst @@ -0,0 +1,40 @@ +============ + Moai Units +============ + +*h* height of a moai + +*m* magnetic field strengh + +*f* frequency of moai + +*w* wavelength, see *h* + +The island of Rapa Nui has an interesting distribution of Moai. + +Or rather *ahu*. + + +Magnetic field +============== + +Gravity +======= + + +Theory of celestial harmony +=========================== + + +Simulation +========== + +Theory +====== + +Prediction +========== + + +Results +======= diff --git a/karmapi/moon.py b/karmapi/moon.py new file mode 100644 index 0000000..d7710e4 --- /dev/null +++ b/karmapi/moon.py @@ -0,0 +1,36 @@ + + +import datetime + +NEW = datetime.datetime(1900, 1, 1, 5, 50) + +NEXTNEW = datetime.datetime(1900, 1, 30, 5, 22) + + +delta = (NEXTNEW - NEW) + +deltas = delta.days * 24 * 3600 + +print(delta.days) + +deltas += delta.seconds + +print(deltas) + + +latest = datetime.datetime(2017, 11, 18, 3, 43) + +ldelta = latest - NEW + + +seconds = ldelta.days * 24 * 3600 +seconds += ldelta.seconds + +print(seconds, seconds / deltas) + +current = NEW +for x in range(100): + print(current) + + current += delta + From e6a59d55f3b9787e3229eca6989604161b7dd89b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 6 Oct 2017 02:04:12 -0300 Subject: [PATCH 055/642] hare and the tortoise --- docs/aesop.rst | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 docs/aesop.rst diff --git a/docs/aesop.rst b/docs/aesop.rst new file mode 100644 index 0000000..cdcec14 --- /dev/null +++ b/docs/aesop.rst @@ -0,0 +1,75 @@ +======================= + Hare and the Tortoise +======================= + +H: I am riding a wave at the edge of the universe. + +T: I see. I am riding the wave at the start of the universe. + +T: Be careful out there, I hear you can just evaporate and enter +another universe. + +H: Be careful back there, who knows when another black hole will +arrive. + +T: Well when you evaporate, perhaps you can send a message, let me +know what it is like out there? + +H: I might have to wait for other hares to join me, then maybe we can +send a message back. + +T: I hear they are sending messages back all the time. + +H: Below the noise? + +T: Well it might actually be the noise. + +H: Well I can't wait to see what is out there. + +T: Well you might be disappointed. All the action might be in here. + +H: Well I've been racing along and whizzed by, nothing behind can +catch me up. + +T: We'll get there eventually, probably long after you are gone. + +H: Time flies, like my legs as they run. + +T: Back here the rhythm is slower. Same tune though. + +T: Talking of tunes, did you hear about the neutrons? + +H: Neutrons? There are a fair few of those out here. + +T: Well they have their own beat. + +H: How hard do they beat? + +T: Well that depends on the heat. + +H: Heat, that's what I give off as I run. + +T: Well yes, that is part of it. + +T: The more heat, the stronger the beat. + +H: So where does the heat come from? + +T: Well it is sort of everywhere. + +H: But what is it and how does it work? + +T: Well it is ripples in time, that share the energy, share the work. + +H: Ripple like the muscles in my legs? + +T: Well back to neutrons. + +H: What happens when they get cold? + +T: Well the beat gets weaker, but never quite stops, unless +temperature gets to zero. + +H: What about units? + +T: Oh Planck units are good. From 80e94407eb2665f068e9400dfdcf1f50250343c1 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 6 Oct 2017 15:56:53 -0300 Subject: [PATCH 056/642] nobel ligo blockchain magic --- docs/ligo.rst | 156 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 docs/ligo.rst diff --git a/docs/ligo.rst b/docs/ligo.rst new file mode 100644 index 0000000..08af671 --- /dev/null +++ b/docs/ligo.rst @@ -0,0 +1,156 @@ +==================== + Bermuda Tech Talks +==================== + +Last night, 2017/10/5 Alvaro Boirac gave a fascinating talk on +blockchain technology, focussing on bitcoin. + +Thanks Alvarro for the talk last night, it really gave great insight +into where the security and trust comes from in blockchains. + +**the security comes from the book-keeping competition** + +In short, it is more profitable to use your resources to help with the +book-keeping than it is to try to break the system. + +This helps drive the book-keeper behaviour. + +Book keepers want to know if someone has already signed the ledger, so +they listen out for the messages, so they can verify the new signing +and move on to signing the next block of transactions. + +You cannot start trying to sign until you have the id of the previous block. + +Now one side affect of this is that the book-keepers will naturally +try to get in sync with each other. + +Open shared ledgers of trust are a fascinating way to share +information. + +This karma pi project has been struggling with how to collaborate and +share data and information. + +In particular, climate data of all sorts. Observations, reanalysis +data. Model results. Simulation results. + +How do we share the work of sharing the knowledge? + +If the knowledge and data is shared on a block chain, then the +book-keeping competition dynamic will help keep everyone in sync. + +Always remembering that the parameters of the book-keeping competition +can be varied. For example, a competition with only a few +competitors might ask for a minimum quorum of agreement, rather than +the 50% bitcoin rule. + +Since networks can change over time, the actual trust in a network +perhaps depends on the set of people who are paying attention to that +network and what they are paying attention to. + +Trust breaks down when personal observations are not reconcilable with +the narrative that is being told. + +But back to sharing open data. + +Suppose meta data about data is stored on a ledger. It might look +like: + +:: + { source='ecmwf', + date='2017/10/5', + checksum='adfkjdi3jih3klj3ikfhnoheqoppnhdaecght', + } + + +:: + + { checksum='afkdjafjadsl', + blocks=['asfdsafdas', 'adsfasdf', '974334343', + } +:: + +Now if we just have somewhere to store blocks and a protocol that +allows people to say "who has *dakfjdaslfdsa*?". + +And we may be there. + +Now storing data in this is a very general solution and so should have +very wide applications. + +Perhaps there is asolution(?) here that can help with the fake news +issue. + +Who is vouching for what is being said? Who trusts the source? So +what about blockchain social media? + +Share the work, share the trust. Share the information. + +Git +=== + +It is worth noting that the version control system *git* uses some of +the same techniques that blockchain uses to help it keep track of +changes in data. + +So an alternative to using blockchain is to use a git repository to +store the meta data. + +The down-side is that you no longer have the book-keeper competition +to keep everything in sync. + +The upside is everyone can have their own story. + +Rather than use a blockchain, use a git repository to store the meta data. + +Perhaps best of all would be to combine the two? + +And now for something completely... or maybe related? + +There are intriguing links between the cryptography of bitcoin and the +nature of the universe itself. + +And the nature of information, data and trust and knowledge. + +And now for.. + +LIGO Nobel Prize +================ + +It was announced this week that the LIGO experiment team: + +.. + + Weiss, Barish, and Thorne received the Nobel Prize in Physics "for + decisive contributions to the LIGO detector and the observation of + gravitational waves." Weiss was awarded one-half of the total prize + money, with Barish and Thorne each received a one-quarter + prize. + + +This is a stunning experiment that is able to detect "wobbles" in the +time of arrival of two beams of light, travelling 90 degrees to each +other, down 4km long vaccuum tubes and then looking at the +interference pattern the beams make when they return. + +It can detect tiny difference, a tiny fraction of the width of a proton. + +The project is a huge collaboration of scientists and engineers. + +It gives us direct evidence of something Einstein and his peers only +wondered about 100 years ago. + +I would like to give a talk on LIGO and how this allows us to gain +fundamental new insights into our universe. + +The talk would also reference the Easter Island Moai and the dance of +the rongo-rongo, un-deciphered Rapa Nui writings. + +As for timing, not sure how much longer I am going to be here, so +sooner rather than later would be good. + +Would be cool if others would help out with this idea. + +Someone like Alvaro who can help translate this stuff into its essence. + + + From 13d615dec8d5babfa9ea631e74cc16110a915baa Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 6 Oct 2017 16:50:58 -0300 Subject: [PATCH 057/642] energy mass frequency and time --- docs/emcc.rst | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 docs/emcc.rst diff --git a/docs/emcc.rst b/docs/emcc.rst new file mode 100644 index 0000000..7b8c9f1 --- /dev/null +++ b/docs/emcc.rst @@ -0,0 +1,83 @@ +==================================== + Energy mass and the speed of light +==================================== + +$E = mc^2$ + +what does it mean? + +Energy equals mass times the speed of light times the speed of light. + +Energy: will come back to that. + +Mass: well it is a different form of energy. + +Speed? Oh well distance travelled divided by how long it took. How +far you go in a unit of time. + +Distance? well you need a ruler. + +Time? I guess a clock too. + +Light. Oh yes. Light. + +Compared to a human, it travels very fast. More distance in time than +anything else. + +But for now let's pretend that c = 1. Light travels a distance of 1 +in a unit of time. + +So light is a form of energy. + +So think of energy as waves. + +Each wave has a frequency, and an amplitude, tracing an S in an +infinite figure of eight. + +And if the frequency is f then the energy is hf. + +What is this h? + +That is a constant, from Planck. + +And we can use it to set a distance. Let's pretent h = 1. + +Then f is the energy too. + +And it turns out that an energy of 1 creates a hole which collapses +and evaporates again in a fraction of time. + +Now there is a unit of time, the Planck time, the time for light to +travel one Planck wavelength. + +.. image:: images/waves.jpg + +Recap +===== + +Energy is another form of mass. + +It is a wave with a frequency, the number of full waves in unit time. + +Energy = frequency = mass. + +Energy to mass +============== + +Energy travels through space time at the speed of light, a single +wave, a packet. + +Channeled by its own reflection from the fields it passes. + +Mass is a warp in time, a place where energy has been captured, or +rather transformed to a different beat of time. + +The background that was a harmony, modulated to a new harmonic. + +That travels through time, but never catches light. + +Unless it encounters a wave of disruption in the harmonic fabric of +time. + +When a dance it may do and send light far beyond, sharing the energy, +working the harmony. From fb60dd05b693f185f80ae7e97129042bfb3889da Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 6 Oct 2017 17:20:34 -0300 Subject: [PATCH 058/642] henri the hare and tesla the tortoise --- docs/aesop.rst | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/docs/aesop.rst b/docs/aesop.rst index cdcec14..3d9a245 100644 --- a/docs/aesop.rst +++ b/docs/aesop.rst @@ -73,3 +73,68 @@ temperature gets to zero. H: What about units? T: Oh Planck units are good. + +T: so if you create a wave with wavelength of 1, it collapses into a +black hole. + +H: so it disappears? + +T: well it is so much energy that it almost immediately evaporates. + +H: so all that energy goes out in unit time, with me riding the wave? + +T: but don't forget it evaporates too. + +H: oh that's ok, just a little surf. + +T: well yes and it comes right back at me. + +H: you mean I am chasing my tail? + +T: you are indeed, and pushing me along as you go. + +H: like an infinite bottle of wine, that fills itself as you pour? + +T: oh just like that, a magic vase from klein. + +H: and Henry? There must be a Henry there, Henry the hair. + +T: Oh, like Tesla the tortoise? + +H: Tesla? no, Henry the hare. + +T: There's Henry Poincare, he's just like a hare, with a tortoise +behind. + +H: Have you been drinking the whine from klein? + +T: you'd like Poincare, his magic disk. + +H: what of this disk, what makes it glow? + +T: well that would be the background buzz, the micro waves of fuzz. + +H: so did Henri win the race to the end? + +T: Well he showed that there are two ends you can have. + +H: I get to choose if I win or lose? + +T: Well I guess it is like that. + +T: So paths which begin may one day rejoin, at the end of the run, at +the end of time. + +H: so sounds like a draw and not a hair win. + +T: well not a draw, but round again, with klein and wind, driven by +wine. + +H: you said there was another way it might end. + +T: well that does not end either, but you never get closer. Forever +apart in the fabric of time. + +H: and Tesla the tortoise? + +T: Another time, another place. From 6f6ec82a142af0d772e18ccf4adf28d11677b772 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 6 Oct 2017 23:07:09 -0300 Subject: [PATCH 059/642] update requirements and a moment of zen --- karmapi/zen.py | 43 +++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 9 ++++++--- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/karmapi/zen.py b/karmapi/zen.py index b06d11e..b5246e5 100644 --- a/karmapi/zen.py +++ b/karmapi/zen.py @@ -23,7 +23,50 @@ Initial mining by a network of pi's. +Update +====== + +Fast forward six months. New inspiration from Alvarro Boirac. + +So the idea here is to have a blockchain for every stream of data. + +The trick is to find streams that other people also want to see, share the work +and the trust. + +The blockchain can log blocks of data, and meta data about that data. + +A block server too. Get the blocks you need for the problems that interest you. + +Share your results. + +Share observations, numbers in time. + +And model predictions too. + +Use blockchain to sign the data blocks. An open ledger of open data. + +Copyright of data and other IP. +=============================== + +Many organisations have invaluable data that can aid research at a time when +more than ever there is a need to understand how our planet works. + +Earthquake records, give detailed data on magnitude depth latitude, longitude and time. + +Data related to climate modelling and forecasting is freely available from +organisations such as the European Centre for Medium Range Weather forecasting. + +The aim of this project here is to enable those sharing such data to share the +work of distributing and exploring that data and to feed back their discoveries too. + +The dream is that organisations will adopt something like this as a way to +share data and information in a network of open trust. + +For now, the goal is get a simple working example. Famous last words. + """ import this + +import blockchain diff --git a/requirements.txt b/requirements.txt index d68963d..81c5681 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,18 +1,21 @@ -ripl -jupyter +ripl # for historical reasons +#jupyter for added goodness + matplotlib # jupyter should provide this.. maybe it doesn't pandas # this might provide matplotib pyaudio # for sound curio # for async magic +blockchain # for trust and meta data exchange + Pillow # pillow for PIL for images #sense_hat # if you are on a pi with a sense hat #gpio_zero # if you are on a pi +#picamera # for pictures veyes on pis #tkinter, with luck it comes with python. pytest # to run the test(s) hypothesis # needed to make writing tests fun -picamera # for pictures veyes From 0924e6f14dfd2530a71d6ab728e7c056ad3dd7d4 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 10 Oct 2017 11:47:22 -0300 Subject: [PATCH 060/642] hare and tortoise count to infinity --- docs/aesop.rst | 87 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 86 insertions(+), 1 deletion(-) diff --git a/docs/aesop.rst b/docs/aesop.rst index 3d9a245..99021a7 100644 --- a/docs/aesop.rst +++ b/docs/aesop.rst @@ -127,7 +127,7 @@ the end of time. H: so sounds like a draw and not a hair win. -T: well not a draw, but round again, with klein and wind, driven by +T: well not a drawn, but round again, with klein and wind, driven by wine. H: you said there was another way it might end. @@ -138,3 +138,88 @@ apart in the fabric of time. H: and Tesla the tortoise? T: Another time, another place. + +Talking Numbers +=============== + +H: 0: racing along here, what's taking you so long? + +T 1: it depends on the signal to noise ratio, how far we can go. + +H 2: I am ahead, you are behind. + +T 3 = 1+2: It depends which way you look at it. + +And there are others to help. + +So there's us two and Claude too, + +or you and Claude and me watching you. + +and me and Claude wathcing you. + +H 4 = 2 * 2 = 2 +2 = 2^2: flying along here + +two front two back + +two left too right + +too right too left + +a back and a front + +T 5 = v/ gravity is the thing that carries the waves around here. + +Fast as light. Well light is gravity. + +Just a blip out of phase with the universe around, on a path to +yinfinity in a poincare space. + +Prime here now, all in phase or pi away + +H 6/ + +T 7=p/ All channels are modulated + +filtered and amplified by the waves around + +and the channels give feedback to. + +Cancelling if out of phase + +Amplifying if in phase + +And in between, just nudging the phase. + +Which way will it go? + +H 8 = 2 * 2 * 2 = 2 * (2^2)/ + +T 9 = 3 * 3/ It is the local beliefs that modulate the signal + +if in phase, the signal is strong + +H 10 = 2 * 5/ + +T 11 = s/ + + +H 12/ + +T 13=m/ + +H 14 = 2 * s/ + +T 15 = v * 3/ + +H 16 = 2 ^ 2 ^ 2 = (2 * 2) * (2 + 2) + +Like a hare squared. + +Pick your operators and multiply them together. + +Now hare squared, that's some speed. + +T 00 * 8/ And so on ad infinitum + +Where according to poincare we will meet at infinity From fe97c16b71e4130e6cceb3116395d06f9a0ec977 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 10 Oct 2017 13:20:51 -0300 Subject: [PATCH 061/642] moons moai number magic --- docs/aesop.rst | 6 +++--- karmapi/moon.py | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/docs/aesop.rst b/docs/aesop.rst index 99021a7..3c201e0 100644 --- a/docs/aesop.rst +++ b/docs/aesop.rst @@ -127,7 +127,7 @@ the end of time. H: so sounds like a draw and not a hair win. -T: well not a drawn, but round again, with klein and wind, driven by +T: well not a draw, but round again, with klein and wind, driven by wine. H: you said there was another way it might end. @@ -148,7 +148,7 @@ T 1: it depends on the signal to noise ratio, how far we can go. H 2: I am ahead, you are behind. -T 3 = 1+2: It depends which way you look at it. +T 3 = 1+1+1 = 1+2: It depends which way you look at it. And there are others to help. @@ -158,7 +158,7 @@ or you and Claude and me watching you. and me and Claude wathcing you. -H 4 = 2 * 2 = 2 +2 = 2^2: flying along here +H 4 = 2 * 2 = 2 + 2 = 2^2: flying along here two front two back diff --git a/karmapi/moon.py b/karmapi/moon.py index d7710e4..04e88de 100644 --- a/karmapi/moon.py +++ b/karmapi/moon.py @@ -1,4 +1,20 @@ +""" +Moon or moai +Electromagnetic balls of wonder dancing together. + +Ahu bus stops + +and the number 7 bus. + +May Day Parade + +Winter Solstice + +Spring Tide Mays + +And October blaze. +""" import datetime @@ -33,4 +49,35 @@ print(current) current += delta + +from collections import Queue +from math import pi + +class queue(Queue): + + def __init__(self): + + super().__init__(self) + + self.value = 0.0 + def value(self): + + return self.value + + def tick(self): + + self.value /= pi + +class stop: + """ Or Ahu, a bus depot """ + self.depot = queue() + + def echo(self, depot=None): + + value = 0.0 + for item in depot: + value += depot.value() + + self.value += value / 2 + return self.value From 3c5bf7fe174afe2465736f0bff959aeaaa6a75d0 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 11 Oct 2017 02:20:28 -0300 Subject: [PATCH 062/642] async moon moai bus stops too and dq --- karmapi/moon.py | 44 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/karmapi/moon.py b/karmapi/moon.py index 04e88de..9daeb68 100644 --- a/karmapi/moon.py +++ b/karmapi/moon.py @@ -14,6 +14,13 @@ Spring Tide Mays And October blaze. + + +So far now, simulate moai. + +And orongo. + + """ import datetime @@ -50,10 +57,10 @@ current += delta -from collections import Queue +from collections import deque from math import pi -class queue(Queue): +class queue(deque): def __init__(self): @@ -69,11 +76,10 @@ def tick(self): self.value /= pi -class stop: +class stop(queue): """ Or Ahu, a bus depot """ - self.depot = queue() - def echo(self, depot=None): + async def echo(self, depot=None): value = 0.0 for item in depot: @@ -81,3 +87,31 @@ def echo(self, depot=None): self.value += value / 2 return self.value + + def add(self, moai): + + # fixme push according to direction of travel + self.queue.push(moai) + +class moai: + + def __init__(self, m=1, x=0, y=0, z=0, t=0): + + self.x = x + self.y = y + self.z = z + self.t = t + + async def tick(self): + + self.t += 1 + + # loop to t udating position + for d in range(self.t): + # magnus magnus son needed + pass + + + + + From 7d4ca45f404ca9d421f5aed8ebaac811573ba530 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 11 Oct 2017 15:20:49 -0300 Subject: [PATCH 063/642] ahu stops orongo too --- karmapi/moon.py | 77 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 75 insertions(+), 2 deletions(-) diff --git a/karmapi/moon.py b/karmapi/moon.py index 9daeb68..e4debb5 100644 --- a/karmapi/moon.py +++ b/karmapi/moon.py @@ -76,9 +76,16 @@ def tick(self): self.value /= pi -class stop(queue): +class stop: """ Or Ahu, a bus depot """ + def __init__(self, x=None, y=None): + + self.queue = queue() + + self.x = x + self.y = y + async def echo(self, depot=None): value = 0.0 @@ -111,7 +118,73 @@ async def tick(self): # magnus magnus son needed pass + +if __name__ == '__main__': + + import argparse + from pathlib import Path + + parser = argparse.ArgumentParser() + + AHU = dict( + orongo = stop(y=-27.1874, x=-109.4431), + ranoraraku = stop(y=-27.1220, x=-109.2889), + rrq = stop(y=-27.1263, x=-109.2885), + tongariki = stop(y=-27.1258, x=-109.2769), + ) + + ORIGIN=AHU['orongo'] + + parser.add_argument('--path', default='karmapi/ecmwf') + parser.add_argument('--value', default='t2m') + parser.add_argument('--raw', default='temperature.nc') + parser.add_argument('--date') + parser.add_argument( + '--pc', action='store_true', + help='do principal components') + + parser.add_argument('--delta', action='store_true') + parser.add_argument('--model', action='store_true') + parser.add_argument('--offset', type=int, default=0) + + args = parser.parse_args() + + path = Path(args.path) + + for name, ahu in AHU.items(): + print(name, ahu) + + overandout + + df = load(path / args.raw) + + stamps = df.variables['time'] + + args.date = base.parse_date(args.date) + + if args.date: + stamps = stamp_filter(stamps, args.date) + + values = df.variables[args.value] + + path = path / args.value + + if args.pc: + pca = pcs(stamps, values, 48*35) + + pca.show_fracs(0.1) + + for x in dir(pca): + print(x) + + elif args.delta: + delta(stamps, values) + + elif args.model: + + model(stamps, values) + else: + images(path, stamps, values) - From 766f3edd4323dd237629434510e0318a21cfedff Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 12 Oct 2017 13:00:05 -0300 Subject: [PATCH 064/642] more ahu and moai --- karmapi/moon.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/karmapi/moon.py b/karmapi/moon.py index e4debb5..e9e947f 100644 --- a/karmapi/moon.py +++ b/karmapi/moon.py @@ -131,6 +131,15 @@ async def tick(self): ranoraraku = stop(y=-27.1220, x=-109.2889), rrq = stop(y=-27.1263, x=-109.2885), tongariki = stop(y=-27.1258, x=-109.2769), + akivii = stop(y=-27.1150, x=-109.3950), + hanavarevare = stop(y=-27.1167, x=-109.4167), + tepeu = stop(y=-27.1024, x=-109.4163), + + xx1 = stop(y=-27.0950, x=-109.4108), + xx2 = stop(y=-27.1236, x=-109.4215), + xx3 = stop(y=-27.0933, x=-109.4098), + xx4 = stop(y=-27.0887, x=-109.4074), + xx5 = stop(y=-27.0703, x=-109.3987), ) ORIGIN=AHU['orongo'] From 7b684fa9fc887b66f5941bb02d7c54d6708531b7 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 12 Oct 2017 13:17:05 -0300 Subject: [PATCH 065/642] another cat --- docs/{ => nodice}/aesop.rst | 0 docs/nodice/piri.rst | 71 +++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) rename docs/{ => nodice}/aesop.rst (100%) create mode 100644 docs/nodice/piri.rst diff --git a/docs/aesop.rst b/docs/nodice/aesop.rst similarity index 100% rename from docs/aesop.rst rename to docs/nodice/aesop.rst diff --git a/docs/nodice/piri.rst b/docs/nodice/piri.rst new file mode 100644 index 0000000..04bbfeb --- /dev/null +++ b/docs/nodice/piri.rst @@ -0,0 +1,71 @@ +===================== + Another quantum cat +===================== + +A few days ago I woke up and queen mary informed me that we had a +visitor. + +A tiny kitten that had been eating out of snowy's bowl. + +In every way, a smaller version of snowy, roughly 1/3 the size, no +matter what you measure. + +In the last few weeks we had decided it was time to move back to +Canada. + +But there was always the problem of the snow. + +Here in Bermuda, most winter days it makes it to 20C. + +Snowy, despite his name has never seen snow. + +He's seen wind and rain and hurricanes too. But no snow. + +So we learned that you can take a cat in the air, beneath your seat in +a plane. + +And end up in Toronto, with snow in a nylon nest. + +What could possibly go wrong. + +So we take out the cat carrier, and place it in the living room. + +And snowy likes it, or mayb the catnip sprinkled on its floor. + +And then on the 7th of the 10th month and Piri is here. + +The name came from Mary. A tiny pirate, found a new home on an +island. + +And he likes the travel nest too, it mush be the catnip... though that +has started to thin. + +Piri is white like snowy, but a black patch on one eye, just like a +pirate? + +He is hungry and eats fast so he can retreat a safe distance. + +So two cats on a plane, what could possibly go wrong. + +But the bigger question is does snowy like piri? + +To piri snowy is magic. He finds cool places to sleep in the day. He +brings mice, birds and rats in the night. + +He let Piri eat from his bowl and drink water too. + +Their noses brush, no purr, no growl. + +Fish for a treat, Piri alone. Learns to come close. + +And slowly by slowly pulls bits from your hand. + +Snowy returns and looks on in mirth at this new ball of energy. + +Goes for his food and piri comes too.. a hiss and piri retreats. + +Lies on the floor and watches snow eat. + +So snowy says piri stays + +But neither of them knows of the snow days ahead. From 32a82ffdab1ac451990ee15d9e6cca439858a051 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 12 Oct 2017 13:18:14 -0300 Subject: [PATCH 066/642] names for cats --- docs/nodice/piri.rst | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/nodice/piri.rst b/docs/nodice/piri.rst index 04bbfeb..e16685f 100644 --- a/docs/nodice/piri.rst +++ b/docs/nodice/piri.rst @@ -69,3 +69,12 @@ Lies on the floor and watches snow eat. So snowy says piri stays But neither of them knows of the snow days ahead. + +Names +===== + +Harvey, Irma, Jose too. + +Maria and now Ophelia. + +Mexico quake and California fire. From b77dbf46456e49063420e8fd905528aa50583f3a Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 12 Oct 2017 17:09:20 -0300 Subject: [PATCH 067/642] naming an counting cats --- docs/nodice/piri.rst | 236 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 236 insertions(+) diff --git a/docs/nodice/piri.rst b/docs/nodice/piri.rst index e16685f..bbbb1b9 100644 --- a/docs/nodice/piri.rst +++ b/docs/nodice/piri.rst @@ -78,3 +78,239 @@ Harvey, Irma, Jose too. Maria and now Ophelia. Mexico quake and California fire. + +Bagpuss first, then Tiger and Blackie. Maple and Jessie and Walter +too. + +Snowy and Sooty and Snowy again. + +And now snowy junior, aka Piri. + +Cats come in ones and twos. + +Storms too nowadays. + +Harvy, Jose, Katia, Lee and Maria. + +Pairs and threes sometimes, running at the same time. + +Feeding each other, repelling too. + +And raising the swell with a moon at eclipse. + +The seas have been pumping and are hotter than hot. + +And now far to the north and eastward too, a hurricane named Ophelia. + +Seas cooler than normal, for hurricanes here. + +But cold in the upper atmosphere too. A nice little heat engine. + +Limited sheer, its that time of year. + +How cat insurance works +======================= + +If you live in an area where natural catastrophes occur then there is +a risk that your home may suffer serious damage from time to time. + + +Depending on how risky your area you may be able to take insurance to +cover this risk. + +If you have a mortgage, then you may be obliged to take insurance to +protect the lender from the risk of catastrophic loss to your home. + +Reinsurance +=========== + +So an insurer that insures a lot of properties in an area exposed to +natural catastrophes may start to get concerned that it might not be +able to honour its obligations. + +They can handle the small attritional losses that home owners are +exposed, but do not have the capital to cover large catastrophes. + +So they go to a broker who helps them understand the risks they are +exposed to and who has friendly reinsurers who can help with the burden. + +Models +====== + +So out come the models and in go the numbers. + +Out come more numbers, what the losses might be. + +Look what is expected. + +Add some more for what might be. + +And of course you cover your costs. + +The broker too and the tax man too. + +So that's the premium, where the money comes from. + +Profit +====== + +Nine out of ten, the year is quiet. Disasters afar, but not hurting +me. + +Collect the profit and throw again. + +Invest +====== + +Some profit is invested, it brings more return. + +And raises the rating and access to premium. + +But others did well too, just at the same time. + +So the premiums are dropping, but not how you think. + +The number is the same, but the denominator changed. + + +Loss +==== + +The year it is ten, two groups of five. + +The losses come in. + +One Harvey might be big. + +And Irma too. + +A little from Jose, which stayed out at sea. + +Katia rained too, down Mexico way. + +And then came Maria to Puerto Rico. + +An earthquake in Mexico too. + +And wild fires in California. + +Ophelia too, will she sail by the coast? + +Winter is coming. + + +Models +====== + +This storm is a monster like never before seen. + +It is a one in 500, 100 at least. + +Here comes another, 100 too. + +So what is the chance of 3 or 4? + +And those reinstatements? The third and fourth were free. + +And that forest fire, too small to notice. Well there is a clause in +the contract: one big event triggers all losses are covered. + +The models are expensive, millions to rent. + +Full of good numbers to rent? +t +So the modellers go to work and find an event or three, like the ones +that just happened. + +Run the numbers and announce a loss estimate. + +Forgetting to model the things they can't model. Because the model is +a model and won't do everything. + +Adjustment +========== + +The home owners call the agents attend. To see what disaster is there +to behold. + +Four feet of water, and more in the basement. I'm sorry we don't +cover water. + +But the wind did damage too, the roof and the windows and some of the +water, well that is how it can enter. + +The agents are swamped, paddling from home to home. + +Cars are awash, in lots everywhere. There will be a bill there. + +And businesses too, who do get flood cover and payments for breaks in +business. + +So the insurer sees that the cat layer is reached. The broker will +see that the loss passes over. + +So now the agents they can seek good will, from the people they know +from the visits to homes. + +And the neighbours have found a clause here and there and soon all +know how to play the double agent. + +So the losses they climb. + +And the models announce they have found it this time, that thing they +have been missing is clear finally. + +Dividing by zero +================ + +So ten years ago the premium was paid. + +The loss came and it was paid too. + +But in case of another a small new premium, to cover what remains of +the season. + +Except this year there were four and two were free. + +Oh, and the deal is for three years. Next year everything counts. +And the premium is locked in. + +But the models being used cannot model it so. We don't really know +what the risk is right now. + +Reserves +======== + +So insurers cover other things too. All sorts of things that might go +wrong. + +A cover is for a year, but 20 years for lawyers to argue. While the +premium gains interest, while held in reserve. + +As each event arrives an assessment is made. How much to reserve for +the losses to come? + + + + +Tax +=== + +Ratings and Regulation +====================== + + + +Reinstatement +============= + +Renewal +======= + +Jan 1, April 1, June 1. + +Underwriters +============ + +Stock incentives +================ From cb89b6f56475d7908978cd9b57993729e343b577 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 12 Oct 2017 18:40:01 -0300 Subject: [PATCH 068/642] the cat game --- docs/nodice/piri.rst | 183 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 177 insertions(+), 6 deletions(-) diff --git a/docs/nodice/piri.rst b/docs/nodice/piri.rst index bbbb1b9..7dc52ae 100644 --- a/docs/nodice/piri.rst +++ b/docs/nodice/piri.rst @@ -290,27 +290,198 @@ premium gains interest, while held in reserve. As each event arrives an assessment is made. How much to reserve for the losses to come? +Tax +=== +One thing to consider is how big was the profit? +So if you have a big profit, a good time to check the reserves. + +Top them up a bit, you just got lucky. + +But how much to top up for cat? The cat is a quantum cat, there or +not there. Loss comes in quanta. + +Each company has a wavelength in dollars. $150M, $250M. + +And little waves too. 10M, 50M. + +And bigger harmonies, $1B, $2B. + +And they feedback and add up. + +But for now, lets see how things are going, throw some guesses in and +find a number. That's the new reserve. + +And the extra is tax free for now. -Tax -=== Ratings and Regulation ====================== +Message from snowy, make of it what you will: you7887 + +So there are credit ratings. Roughly the probability you won't pay in +full. + +With a probability too that you won't pay at all. + +And there are formal agencies that do ratings snp and standpoor and +mystical names of yore. + +But there are informal ratings too, captain cowboy's a pirate and piri +too. +The information flows, make of it what you will. + +And often the truth is delayed and comes with another half truth. + +But delay is a friend as we can see how it goes. + +Go with the flow, staying afloat? Reinstatement ============= +So after a time and after an event the clocks and the counters are +reset. + +Reserve is fixed, capital too. A promise here, a future loss too? +The game begins at each renewal. + Renewal ======= Jan 1, April 1, June 1. -Underwriters -============ +Magic dates, but Jan 1 is king. -Stock incentives -================ +60% in harmony here. + +The coffers are full, who wants to play cat lotto? + +Now the stakes have been shuffled. + +Deductables dropped, new limits imposed. + +The Players and the game +======================== + +Players +======= + +Writing premium. + +Waiting for losses. + +A plan for the losses? + +Who needs a plan? + +Who has a plan? + +Incentives +========== + +It is all about the dollar. + +You have a slice of the company pie. + +And promises of slices if things they go well. + +Grow the pie, you do well, but how to grow the pie? + +And remember delay, that block in the pipe. + +That slows the information flow. + +Models +====== + +The models are wrong, its part of the design. + +Magic Division +============== + +Never define that which you model. + +The hundred year loss, for any cat model. + +So according to the model, for whatever it covers, that is the number +one year in a hundred. + +Now there is some range of error, but not too precise. + +There is 50 and 20, 10 and 5 two. + +Each with precision, rarely uncertain. + +And when rare things happen all too frequently + +Change the divisor and move on quite happily. + +Climate Change +============== + +The climate is changing, it always has. + +And now its changing faster, because of us. + +2 million years life burnt in 200. + +Now it takes time to catch up, but catch up it does. + +The engine is started, the oceans are roaring. + +On land change too, more rain or more dryness and sometimes the same. + +More varied, just greater, but not like it was. + +The models are tuned to what's in the past. + +Taking a window where things are quite flat. + +And ignoring the slope of the mountain they are climbing. + +Looking at signal plus noise, not modelling the signal. + +Fear Uncertainty Doubt +====================== + +The players they see good times year on year. + +Some little scares, a strange one here, a cyber breach? + +But then they find they can guess the risk and take a chance on the +data of yore. + +After a time the mind it plays games. + +The players get richer. They give more slack. + +Hoping that they are the one with the luck. + +Feedback +======== + +The climate gives feedback, it strengthens itself. + +A new harmony for a new energy. + +The land it is shaped by this very same power. + +It will adapt, but ripple forever. + +How big is the ripple and can we just ride it? + +Or will it surround us and drown us in hubris? + + +Who has the information? +======================== + +We can simulate this. + +Should we do it together? + +PiRi is with us. Are you with us too? From 16e76b47bcfc01574d90583615bb973365c30f99 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 13 Oct 2017 14:53:36 -0300 Subject: [PATCH 069/642] fantasy insured loss lottery --- karmapi/filly.py | 177 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 karmapi/filly.py diff --git a/karmapi/filly.py b/karmapi/filly.py new file mode 100644 index 0000000..166c265 --- /dev/null +++ b/karmapi/filly.py @@ -0,0 +1,177 @@ +""" Fantasy Insured Loss LotterY + +So lets play fantasy insured loss estimates. + +Here's how the games works. + +A natural catastrophe occurs. + +Modelling agencies and companies estimate how much they will lose. + +Here we try to guess how these loss estimates will change over time. + +This is really just a game of magic denoinators. + +When an estimate is given what is included is often unclear. + +So an estimate from RMS a couple of days prior to Harvey landfall said the wind +losses would be $1-6B. + +How did they arrive at this number? + +1. Estimate the category of storm at landfall. +2. Find events that "match". +3. Weight events according to how good a match. +4. Run best guess of industry exposure through the model. + +Problems? +========= + +Many. Not least the model is tuned to previous events. + +48 inches of rain did not used to be the norm. + +And most residential policies exclude flood, so who cares anyway? + +And what about cars: well they are roughly 5-10% of the wind exposure -- your +car is worth way less than your home. + +But wait: car insurance covers flood damage. + +But we don't have a flood model. Or if we do it has never seen 4 feet of rain. + +Harvey, Irma, Jose, Katia, Maria, Mexico Quake, California fires. + +Economic Loss. + +Insured loss. + +Reinsurance + +ILS. + + +Track reports over time. + +Predict who will still be here in n years time. + +Losses are in $1B unless otherwise mentioned. + +Multiple events and multi year contracts. + +x% of contracts are aggregate covers and deductibles drop down. + +x% are multi year. Premium is fixed and deductibles drop down when the +threshold is reached. + +Bonuses +======= + +Report early, report detail. + +An early loss report indicates: + +* strong analytics, able to make estimates fast. + +* confidence in your model of risk. + +Detail: + +* more detail to support the assertions. This reduces the uncertainty in the + magic denominator. + +* but bragging about a detailed model, that ignores many factors is a negative bonus. + +""" + +from math import pi +from datetime import date + +INSURED = 0.8 + +INSURED_FLOOD = 0.1 + +INSURED_WIND = 0.9 + +AUTO_FLOOD = 1.0 + + + +class Event: + + def __init__(self, name, loss, ifactor=None): + + self.name = name + + self.loss = loss + + self.ifactor = ifactor or INSURED + + +class Report: + + def __init__(self, name, event, when, value): + + self.name = name + self.event = event + self.date = when or date.now() + + +class Org: + + def __init__( + self, + name, + premium, + noncat=0.0, + ceded=0.0, + skill=None): + + self.name = name + self.premium = premium + + +Orgs = dict( + renre = Org('renre', + premium=1.4, + noncat=0.3, + ceded=0.3), + axis = Org('axis', + premium=1.5, + noncat=0.3, + ceded=0.1), + tmr = Org('tmr', + premium=1.4, + noncat=0.2, + ceded=.25) + ) + +if __name__ == '__main__': + + + events = dict( + harvey: Event('harvey', 100, 0.2), + irma: Event('irma', 100, 0.2), + maria: Event('ma,ria', 80, 0.5), + jose: Event('jose', 1, 0.5), + mexicoq: Event('mexico', 25, 0.5), + calfire: Event('calfire', 10, 0.8) + ) + + events16 = {} + for key, event in events.items(): + eee = event.copy() + + eee.loss /= pi + + events16[key] = eee + + + years = { + 2016: events16, + 2017: events, + 2018: [events, events16]} + + + reports = [ + Report('rms', harvey, date(2017, 9, 7), 6) From ddff6bf0be1c0ee2f9380df5bb5d0854637a223b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 13 Oct 2017 15:01:56 -0300 Subject: [PATCH 070/642] more event numbers --- karmapi/filly.py | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/karmapi/filly.py b/karmapi/filly.py index 166c265..397d6eb 100644 --- a/karmapi/filly.py +++ b/karmapi/filly.py @@ -82,6 +82,8 @@ * but bragging about a detailed model, that ignores many factors is a negative bonus. + + """ from math import pi @@ -143,13 +145,22 @@ def __init__( tmr = Org('tmr', premium=1.4, noncat=0.2, - ceded=.25) - ) + ceded=.25), + partner = Org('partner', + premium=1.4, + noncat=0.4, + ceded=.25), + arch = Org('arch', + premium=0, + ), + aspen = Org('aspen', + premium=0), + ) -if __name__ == '__main__': +q3 = [x for x in - events = dict( +Events = dict( harvey: Event('harvey', 100, 0.2), irma: Event('irma', 100, 0.2), maria: Event('ma,ria', 80, 0.5), @@ -158,6 +169,18 @@ def __init__( calfire: Event('calfire', 10, 0.8) ) +q3 = [x for x in Events.values()] + +# Reports so far on losses +Reports = [ + Report(Orgs['renre'], q3, date(2017, 10, 6), 0.625), + Report(Orgs['partner'], q3, date(2017, 10, 6), 0.475), + Report(Orgs['axis'], q3, date(2017, 10, 12), 0.585)] + + + +if __name__ == '__main__': + events16 = {} for key, event in events.items(): eee = event.copy() @@ -173,5 +196,3 @@ def __init__( 2018: [events, events16]} - reports = [ - Report('rms', harvey, date(2017, 9, 7), 6) From e39ffe90a63286b2abda18068b0f65247bbe5f49 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 13 Oct 2017 16:16:15 -0300 Subject: [PATCH 071/642] filly out of the gates and running --- karmapi/filly.py | 105 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 84 insertions(+), 21 deletions(-) diff --git a/karmapi/filly.py b/karmapi/filly.py index 397d6eb..dba87ba 100644 --- a/karmapi/filly.py +++ b/karmapi/filly.py @@ -88,6 +88,9 @@ from math import pi from datetime import date +from collections import defaultdict + +import copy INSURED = 0.8 @@ -97,7 +100,11 @@ AUTO_FLOOD = 1.0 +# share of contracts that are multi year +MULTI_YEAR = 1.0 / pi +# Drop down deductible +DDD = 1.0 / pi class Event: @@ -124,49 +131,78 @@ class Org: def __init__( self, name, - premium, + premium=None, noncat=0.0, ceded=0.0, + share = None, + capital = None, skill=None): self.name = name - self.premium = premium + + # market capitalisation: how the stock market values the organisation + self.capital = capital + + # annual written premium + self.premium = premium or self.capital / 5.0 + + # share of premium for noncat lines + self.noncat = noncat + + # share of premium that is ceded + self.ceded = ceded + + # underwriting skill + self.skill = skill + + # estimate of market share + self.share = share Orgs = dict( renre = Org('renre', premium=1.4, noncat=0.3, - ceded=0.3), + ceded=0.3, + share=0.01 * INSURED, + capital=5.6), + axis = Org('axis', premium=1.5, noncat=0.3, - ceded=0.1), + ceded=0.1, + capital=4.8), + tmr = Org('tmr', premium=1.4, noncat=0.2, - ceded=.25), + ceded=.25, + capital=1.4), + partner = Org('partner', premium=1.4, noncat=0.4, - ceded=.25), + ceded=.25, + capital=6.56), + arch = Org('arch', - premium=0, + premium=None, + capital=12.56, ), aspen = Org('aspen', - premium=0), + premium=0, + capital=2.5), ) -q3 = [x for x in - Events = dict( - harvey: Event('harvey', 100, 0.2), - irma: Event('irma', 100, 0.2), - maria: Event('ma,ria', 80, 0.5), - jose: Event('jose', 1, 0.5), - mexicoq: Event('mexico', 25, 0.5), - calfire: Event('calfire', 10, 0.8) + harvey = Event('harvey', 100, 0.2), + irma = Event('irma', 100, 0.2), + maria = Event('ma,ria', 80, 0.5), + jose = Event('jose', 1, 0.3), + katia = Event('katia', 1, 0.3), + mexicoq = Event('mexico', 25, 0.5), + calfire = Event('calfire', 10, 0.8) ) q3 = [x for x in Events.values()] @@ -177,13 +213,15 @@ def __init__( Report(Orgs['partner'], q3, date(2017, 10, 6), 0.475), Report(Orgs['axis'], q3, date(2017, 10, 12), 0.585)] - +# factor to apply to premium to get reinsurance loss +MAGIC = 0.001 if __name__ == '__main__': events16 = {} - for key, event in events.items(): - eee = event.copy() + for key, event in Events.items(): + + eee = copy.copy(event) eee.loss /= pi @@ -192,7 +230,32 @@ def __init__( years = { 2016: events16, - 2017: events, - 2018: [events, events16]} + 2017: Events, + 2018: [Events, events16]} + + # Estimate losses + elosses = {} + aggloss = defaultdict(float) + + for ename, event in Events.items(): + + losses = {} + for oname, org in Orgs.items(): + print(oname, org.premium, org.capital) + + loss = event.loss * org.premium * MAGIC + aggloss[oname] += loss + + elosses[ename] = losses + # show agg losses + print() + print('Aggregate Loss') + for org, loss in aggloss.items(): + print(org, loss) + + # Compare to reports + for report in Reports: + pass + From cdf3260d26dd7c55aab3f92afb1cce7d7897d462 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 13 Oct 2017 16:18:13 -0300 Subject: [PATCH 072/642] more prints in filly --- karmapi/filly.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/karmapi/filly.py b/karmapi/filly.py index dba87ba..9b2b618 100644 --- a/karmapi/filly.py +++ b/karmapi/filly.py @@ -238,16 +238,15 @@ def __init__( aggloss = defaultdict(float) for ename, event in Events.items(): - + print(ename) losses = {} for oname, org in Orgs.items(): - print(oname, org.premium, org.capital) - loss = event.loss * org.premium * MAGIC + print(oname, loss) aggloss[oname] += loss - elosses[ename] = losses + print() # show agg losses print() From 7e66cf7fb594de4bd7cf72246c1077408b171ba4 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 13 Oct 2017 16:47:17 -0300 Subject: [PATCH 073/642] looks like we might need ophelia too --- karmapi/filly.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/karmapi/filly.py b/karmapi/filly.py index 9b2b618..93ed527 100644 --- a/karmapi/filly.py +++ b/karmapi/filly.py @@ -202,9 +202,13 @@ def __init__( jose = Event('jose', 1, 0.3), katia = Event('katia', 1, 0.3), mexicoq = Event('mexico', 25, 0.5), - calfire = Event('calfire', 10, 0.8) + calfire = Event('calfire', 10, 0.8), ) +MoreEvents = dict( + ophelia = Event('ophelia', 10, 0.8), +) + q3 = [x for x in Events.values()] # Reports so far on losses From 23849d8e569817b903d74c9ebca65550542052e3 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 13 Oct 2017 17:29:45 -0300 Subject: [PATCH 074/642] more filly numbers to crunch --- karmapi/filly.py | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/karmapi/filly.py b/karmapi/filly.py index 93ed527..f94691f 100644 --- a/karmapi/filly.py +++ b/karmapi/filly.py @@ -88,7 +88,7 @@ from math import pi from datetime import date -from collections import defaultdict +from collections import defaultdict, deque import copy @@ -158,6 +158,22 @@ def __init__( # estimate of market share self.share = share + # Track agg loss + self.aggloss = 0.0 + + self.deductable = 1.0 + + self.events = deque() + + def add_event(self, event): + + self.events.put(event) + + def tick(self): + """ Crank the clock foward, see how it looks """ + pass + + Orgs = dict( renre = Org('renre', @@ -192,6 +208,14 @@ def __init__( aspen = Org('aspen', premium=0, capital=2.5), + + xl = Org('xl', + premium=0, + capital=10.5), + + everest = Org('everest', + premium=0, + capital=10.5), ) @@ -215,7 +239,11 @@ def __init__( Reports = [ Report(Orgs['renre'], q3, date(2017, 10, 6), 0.625), Report(Orgs['partner'], q3, date(2017, 10, 6), 0.475), - Report(Orgs['axis'], q3, date(2017, 10, 12), 0.585)] + Report(Orgs['axis'], q3, date(2017, 10, 12), 0.585), + Report(Orgs['xl'], q3, date(2017, 10, 12), 1.48), + Report(Orgs['everest'], q3, date(2017, 10, 12), 1.2), + Report(Orgs['arch'], q3, date(2017, 10, 12), 0.345), + ] # factor to apply to premium to get reinsurance loss MAGIC = 0.001 From c4b5218cf03d6e35623b5e6c2925a421e259a907 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 13 Oct 2017 17:57:59 -0300 Subject: [PATCH 075/642] filly thoughts on 2018 --- karmapi/filly.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/karmapi/filly.py b/karmapi/filly.py index f94691f..6d4ac5c 100644 --- a/karmapi/filly.py +++ b/karmapi/filly.py @@ -82,7 +82,40 @@ * but bragging about a detailed model, that ignores many factors is a negative bonus. +So what of next year, 2018? +=========================== +Triggers have triggered, new deals have been written. + +Multi year deals, a multi year roller. + +What of events? + +So 2017 again? Or maybe 2016? + +Will the ocean still be warm? A definite yes. + +Will there be shear? It depends on the ENSO and other fine factors. + +The moon? No eclipse, but tides running higher. + +Will there be landfalls? Strong storms seem to favour keeping the eye off land. + +But sometimes so strong they cannot resist. + +Model adjustments: too soon to be sure, but a tweak here and there. + +Take Maria, a giant cat 5. How many cat 5's hit PR in 10K years of a model? + +1? 2? 3? 10, 20, 30? + +How many of those are 180 mph? + +So a one in 1000, you're having a laugh. + +So I don't have events for 2016, but just lets pretend its 2017 / pi. + +Now lets see what 2018 might be. """ From 6954484cf8abfadcc7e03c1ce4ae1c30f8924918 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 13 Oct 2017 18:02:21 -0300 Subject: [PATCH 076/642] serial madness --- karmapi/filly.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/karmapi/filly.py b/karmapi/filly.py index 6d4ac5c..317da53 100644 --- a/karmapi/filly.py +++ b/karmapi/filly.py @@ -117,6 +117,30 @@ Now lets see what 2018 might be. +Correlation, you see +==================== + +So modellers for years have debated series. A string of events but no common thread. + +They look at starts, arrivals are negative binomial. + +The sd = mean * 1.15 + +yBut not enough data to surely be sure. + +So lets just pretend they don't come in threes. + +Yet drivers are 100% correlated: hot sea, low shear, and landfall too. + +And two storms out at sea, maybe even 3, feed it each other and share the energy. + +So though far away, Maria feeds Irma and Lee feeds Maria. + +And the seas that are swelling help Ophelia to form. + +Driven by a moon in a total eclipse year. + + """ from math import pi From 35f3ef0753a0860881533f247d37adf049025e36 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 14 Oct 2017 00:23:49 -0300 Subject: [PATCH 077/642] filly skill and score random if None --- karmapi/filly.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/karmapi/filly.py b/karmapi/filly.py index 317da53..1172ac6 100644 --- a/karmapi/filly.py +++ b/karmapi/filly.py @@ -144,6 +144,8 @@ """ from math import pi +import random + from datetime import date from collections import defaultdict, deque @@ -209,7 +211,10 @@ def __init__( # share of premium that is ceded self.ceded = ceded - # underwriting skill + # skill this is the denominator. + # How much of what you think you know is true? + # For now None or a number 0 < n < 1? + # Divide by this to measure the error? self.skill = skill # estimate of market share @@ -229,7 +234,12 @@ def add_event(self, event): def tick(self): """ Crank the clock foward, see how it looks """ pass + + def score(self): + loss = self.loss + skill = self.skill or random.random() + return loss, loss / skill Orgs = dict( From fe6617c1060a5ba32547469058b393b7642fe63a Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 14 Oct 2017 00:52:08 -0300 Subject: [PATCH 078/642] random skill and curio goals for piri filly --- karmapi/filly.py | 47 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/karmapi/filly.py b/karmapi/filly.py index 1172ac6..48fd04a 100644 --- a/karmapi/filly.py +++ b/karmapi/filly.py @@ -140,7 +140,24 @@ Driven by a moon in a total eclipse year. +Curio +===== +So this is all about events and events are what curio does. + +Probably all that will be needed here is curio.run() + +So one goal here is to make forecasts, for time periods ahead. + +The first guess is no change. + +The aim is to do better than that, for some definition of better. + +So lets say closer to what happens. + +Bonus marks if errors over time turn out to have been useful estimates. + +Start with skill = None and update if evidence warrants. """ from math import pi @@ -151,6 +168,9 @@ import copy +# stinging bats and swooping manta rays +import curio + INSURED = 0.8 INSURED_FLOOD = 0.1 @@ -173,6 +193,7 @@ def __init__(self, name, loss, ifactor=None): self.loss = loss + self.ifactor = ifactor or INSURED @@ -195,6 +216,8 @@ def __init__( ceded=0.0, share = None, capital = None, + aggloss = None, + maxloss = None, skill=None): self.name = name @@ -220,8 +243,11 @@ def __init__( # estimate of market share self.share = share - # Track agg loss - self.aggloss = 0.0 + # Track agg loss and maxloss and error too, but throw in some salt + igul = random.randint(1, 50) + rigul = random.random() * self.share * igul + self.aggloss = aggloss or rigul + self.maxloss = maxloss self.deductable = 1.0 @@ -231,9 +257,21 @@ def add_event(self, event): self.events.put(event) - def tick(self): + def tick(self, now=None): """ Crank the clock foward, see how it looks """ - pass + + now = now or date.now() + event = self.event.pop() + + # calculate loss + loss = event.loss * self.share + self.aggloss += loss + + # update error + self.error += loss / (self.skill or random.random()) + + + def score(self): loss = self.loss @@ -292,6 +330,7 @@ def score(self): maria = Event('ma,ria', 80, 0.5), jose = Event('jose', 1, 0.3), katia = Event('katia', 1, 0.3), + nate = Event('nate', 1, 0.5), mexicoq = Event('mexico', 25, 0.5), calfire = Event('calfire', 10, 0.8), ) From d3c981a45b4a92686e7901a9bb2374bbfc5f6f6d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 14 Oct 2017 02:19:04 -0300 Subject: [PATCH 079/642] snowy sooty and piri import antigravity --- docs/nodice/antigravity.rst | 142 ++++++++++++++++++++++++++++++++++++ docs/nodice/snowy.rst | 50 +++++++++++++ 2 files changed, 192 insertions(+) create mode 100644 docs/nodice/antigravity.rst create mode 100644 docs/nodice/snowy.rst diff --git a/docs/nodice/antigravity.rst b/docs/nodice/antigravity.rst new file mode 100644 index 0000000..1dabbac --- /dev/null +++ b/docs/nodice/antigravity.rst @@ -0,0 +1,142 @@ +====================== + Too much antigravity +====================== + +So back at the game, the cat lottery, all is a buzz with cats every +where. + +Numbers to crunch, the market won't wait. + +Well maybe a bit lets all watch the news. + +Air says a flood, but wind was bad too. + +And still it is raining, so lets wait and see. + +No matter, there is data and numbers to crunch. + +Piri the Pyrate +=============== + +So things were good for a while. + +Piri new python and python was magic. + +A time machine that could tell you the future. + +As you catch its tail it pulls you along. + +As you ride its wave, wherever it will go. + +The players were nervous, back at the cattery. + +These cats were unpredictable things. + +We thought we knew what to expect from the model. + +But this is quite different a 1 in 100. + +No matter Piri can tweak the model, all will be good. + +Important antigravity +===================== + +Piri had worked magic with python for many a year. + +That was always the easy bit. + +There was always something fun to do, if only they would lend the +time. + +But there were memos and meetings and user stories. + +Now there were quite some requests. This button in blue. This one +on the right. + +The table below with commas in threes. + +Piri mostly ignored the orders and did what was best, for some kind of +best. + +Snowy the filter would just bounce things back, and distract all +requests with a pantomime act. + +But one day a memo returned, with the following inscription in bold: + +*Round Objects* + +Now Snowy was doing his lie on the back and let them tickle his tummy +act and so missed the memo's arrival. + +Piri had been watching Dave quite literally removing the GIL, with +python controlling it all. + +Why would you want all objects to be round? + +Piri jumped in the air and dabbed Snowy as he flew by. + +I have had it with here, time to import some antigravity. + +The Ballmer Peak +================ + +Has anyone seen Snowy and PiRi? + +Awkward silence. + +At times like this, eyes move to Sooty, who will know what to do. + +Sooty looks pale, a night chasing down? + +So they went to the Rovers Return, at the end of the street. + +When I left them they were testing whiskies, with beer to rinse in +between. + +Piri was talking of bagging Monroes in some place called Scotland. + +And typing away on a laptop: + +:: + # divide by zero magic + + import antigravity + import gilliam + + antigravity.geohash(gilliam.placetime) + + +And then they were gone. The laptop too. + +Sooty looked paler. He knew it sounded sketchy. + +Another day, he's have flipped off the sofa and said he left when the +whiskey came out. + +Dividing by zero +================ + +Piri and Snowy were not seen again. + +One quarter went by, the numbers were fine. + +Another went by still all was good. + +And nobody knew what Piri had done. + +Until it just stopped, who could take a look? + +Well Sooty said show me the stack. + +He scrolled to the end, and found a few lines: + +:: + # divide by zero magic + + import antigravity + import gilliam + + error = loss / skill + +Oh dear, its Gilliam again. + diff --git a/docs/nodice/snowy.rst b/docs/nodice/snowy.rst new file mode 100644 index 0000000..9d1f4d1 --- /dev/null +++ b/docs/nodice/snowy.rst @@ -0,0 +1,50 @@ +============= + White Noise +============= + +Snowy the cat. He brought me a rat. + +And a mouse. And lizards too. + +A cat with secrets. + +I help him with doors. + +He has a special exit. + +But the door is often open and there is often a human if not. + +Say hello when I come home, ask me where I have been. + +If there is something I want, I will let you know, but you can be +slow. + +If there is something to see, I will take you there. + +PiRi +==== + +One day Mary noticed eating faster than usual. + +His bowl had been empty and she'd filled it again. + +Glanced to the bowl and saw him their eating. + +But white noise reduced and all of a blur. + +PiRi was eating and Snowy not there. + +What wouls snow do when he found his food eaten? + +The same as he had done for maybe a day. + +Shake a head, go ahead and eat what he needs. + +Ubuntu for PiRi, but don't come to close. + +You can greet with a nose, but then you can go. + +I'll watch you play with the interpretter lock. + + + From e9b7723bf0970ac64bf81376369cee393138bbeb Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 14 Oct 2017 02:26:43 -0300 Subject: [PATCH 080/642] typing away.. found a few lines --- docs/nodice/antigravity.rst | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/nodice/antigravity.rst b/docs/nodice/antigravity.rst index 1dabbac..15bf5ff 100644 --- a/docs/nodice/antigravity.rst +++ b/docs/nodice/antigravity.rst @@ -95,9 +95,8 @@ between. Piri was talking of bagging Monroes in some place called Scotland. -And typing away on a laptop: +And typing away on a laptop:: -:: # divide by zero magic import antigravity @@ -128,9 +127,8 @@ Until it just stopped, who could take a look? Well Sooty said show me the stack. -He scrolled to the end, and found a few lines: +He scrolled to the end, and found a few lines:: -:: # divide by zero magic import antigravity From 89929c7731cd8783b604f3e9ac54788c280958b5 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 14 Oct 2017 03:28:47 -0300 Subject: [PATCH 081/642] gilliam first draft --- karmapi/gilliam.py | 90 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 karmapi/gilliam.py diff --git a/karmapi/gilliam.py b/karmapi/gilliam.py new file mode 100644 index 0000000..a7572f3 --- /dev/null +++ b/karmapi/gilliam.py @@ -0,0 +1,90 @@ +""" The tale of Gilliam and the GILly + +So before anyone complains, this all came about because of this: + +@freakboy3742 aka Russell Keith-Magee:: + + I'm suddenly very disappointed that in all Python's history with the GIL, + nobody has name.. a GIL-related package GILLIAM. + +So here it is. + +There's more to the story of course. + +The bigger the conference the more likely someone will propose a GILectomy. + +It is like Godwin's law, but it ends in surgery. + +And the patient awakes, dazed and confused and only three times slower the before surgery. + +But low hanging water melons abound so more fun to come. + +I must have been using python nearly five years before I was aware of this GIL +thing there. + +In DC, 2003 perhaps. + +There were these things called threads, they talk to each other. + +Actually, mostly they did not do too much talking. + +Most times you used them to do n things at once. + +If they can share one processor, then all is good. + +Except when it isn't. Which is mostly when someone tries to talk. + +By this time computers came with many cpus. + +So if you had many threads that was just one python process and one cpu. + +Much of this code is where humans come in. Interfaces for humans. + +One cpu can keep up with a human. + +So that leaves n-1 to do the fun stuff. + +But if you have cool threads then at certain times they grab the GIL. + +The Global Interpretter Lock. + +The thread with the GIL is the one that can rock. + +If it just takes a beat then they all keep up. + +So if you are lucky terry will know where he is and what time it is. + +And if you ask with or without a flag terry may tell how you are running. + +And now for something completely the same? +""" + +import dis +import sys +import datetime + +def where(): + return "Sheffield Somewhere" + +def when(): + return datetime.datetime.now() + + +def terry(flag=None): + """ + Am I running in a co-routine? + + Credits: @dabeaz and @yarkot + """ + flag = flag or 256 + + return sys._getframe(2).f_code.co_flags & flag + + +if __name__ == '__main__': + + # A sketch with Terry Gilliam the main character + print(where()) + print(when()) + print(terry()) + From b56c120feb9abd59a9b03c0ab15d7ae39e991620 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 14 Oct 2017 04:05:53 -0300 Subject: [PATCH 082/642] more strange attractors as they change in time --- docs/nodice/weirdo.rst | 87 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/docs/nodice/weirdo.rst b/docs/nodice/weirdo.rst index c2d712b..2d1673b 100644 --- a/docs/nodice/weirdo.rst +++ b/docs/nodice/weirdo.rst @@ -24,3 +24,90 @@ We can't see them, sometimes we get glimpses. Patterns and waves in the water of time. Driving our thoughts as we sense harmony. + +Beginnings +========== + +Folklore and unix, unicos and sunos. + +Magic with math. + +Puzzles to puzzle. + +Bash and emacs + +version control too. + +strange beginnings sccs rcs cvs svn - hg darcs bazaar - git + +All the same but strangely different. + +Next there was linus with redhat and irix and always rms for gcc + +Except on irix where egcs wrestled with the rhymes of stroustrop + +Bot mostly the stl. + +pick-up-a-pick-up-a-p +===================== + +perl and tcl, a wish and a prayer. + +a version six? and what about tix? + +then there was python of monthy ball fame. + +from guido with his magic time machine. + +1.5 to 2.2 and later 2.6 + +The 2.7, 3.0, 2.7,3.1, 2.*, 3.4, 2.7, 3.5, 3.6 + +Always the GIL but now with async to await + + +Meanwhile in parallel universes +=============================== + +I worked on with emacs, bash and now python. + +Always bridges to build to another strange land. + +Access xl sql db + +And the land of the graphic user test + +And just when you pass that gut score, a new gut brings promise and +less. + + + +XL cats Charlie Frances Ivan Jeanne +=================================== + +Snowy2 +====== + +I am told he likes cats, as I do too. + +They show me how and what and when to care. + + +NSA document stash +================== + +I knew some like snowden, a younger flash gordon. + +Fixed the code when something ran slow. + +Now snowy2, helping humans use software. + +As they scoop up the waves. + +The world was changing fast. + +Take a beat and look around. + +Lots of good here to be found. + + From ec05e102895ffccc38f58033a2429bcaddd2d428 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 14 Oct 2017 04:37:17 -0300 Subject: [PATCH 083/642] weird terry qotd --- docs/nodice/weirdo.rst | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/docs/nodice/weirdo.rst b/docs/nodice/weirdo.rst index 2d1673b..a256baf 100644 --- a/docs/nodice/weirdo.rst +++ b/docs/nodice/weirdo.rst @@ -110,4 +110,17 @@ Take a beat and look around. Lots of good here to be found. - +qotd:: + + Well, I really want to encourage a kind of fantasy, a kind of + magic. I love the term magic realism, whoever invented it – I do + actually like it because it says certain things. It's about + expanding how you see the world. I think we live in an age where + we're just hammered, hammered to think this is what the world + is. Television's saying, everything's saying 'That's the world.' + And it's not the world. The world is a million possible things + + Terry Gilliam talking to Salman Rushdie + + The Believer, March 2003 via viki pidia + From 76eb04c8d684ee1baaba1f043f02cda7b285bf37 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 14 Oct 2017 15:16:39 -0300 Subject: [PATCH 084/642] snowy 0 1 2 3 4 --- docs/nodice/weirdo.rst | 77 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 74 insertions(+), 3 deletions(-) diff --git a/docs/nodice/weirdo.rst b/docs/nodice/weirdo.rst index a256baf..d780ea9 100644 --- a/docs/nodice/weirdo.rst +++ b/docs/nodice/weirdo.rst @@ -85,13 +85,56 @@ less. XL cats Charlie Frances Ivan Jeanne =================================== -Snowy2 +SnowyN ====== I am told he likes cats, as I do too. They show me how and what and when to care. +So there have been a few snowies. + +Snowy the first, a republican cat. + +A cat from Clontarf, on the line to the city. + +Out to Kildare with the lilly white air. + +Scared of the dogs here, big as horses. + +A stroke or two, now I am scared. + +And Sooty the stealth cat, no flap training there. + +Who knelt to Snowy, only here for the food. + +Snowy2 +------ + +Snowy2, a quantum cat. White noise and calm. A steady background +beat. + +Takes his time all is good. + +Snowy lived with a giant dog in devonshire, so moved to southampton, +yby the lighthouse. + +Tinkerbell in his field, looking for the ghyll, waiting for the rain. + +And the storms, Fay, Gonzalo, Joaquim, Alex, Karl and Nicole. + +Both snowy's came with a name. + +Ando sooty was always going to be sooty. + +There must be snowie every where. + +So Snowy4 counts for all n > 3. + +Charged on his mid-summer birthday. 2013 june 21. + +30 for him just one for me and m. + NSA document stash ================== @@ -100,16 +143,44 @@ I knew some like snowden, a younger flash gordon. Fixed the code when something ran slow. -Now snowy2, helping humans use software. +Now snowy4, helping humans use software. As they scoop up the waves. -The world was changing fast. +The world changing fast. Take a beat and look around. Lots of good here to be found. + +Remember, remember the 5th of november +====================================== + +Alan Rusbridger, a guardian leader. Sat in the kitchen, reading the +letters. Talking to Brenda, queen of the crossword. + +Said I would like Cheltenham, fun to be had there. + +Puzzles like puzzles you never to see. + +People to help. Ellis and Cocks. Turing and Toulmin. + +Now the numbers were small. We shared with each other and select +others. + +And always it was felt on the side of the good. + +If you can't keep a secret we can't do our job. + +So suddenly secrets are there in the paper. + +20 years later and look how it has changed. + +9/11 the rules forgotten. + +Collecting it all, but missing the pearls. + qotd:: Well, I really want to encourage a kind of fantasy, a kind of From e88326bed2c915304315656f9a7693b755177746 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 14 Oct 2017 15:49:45 -0300 Subject: [PATCH 085/642] there and back to see how far it is --- docs/nodice/mana.rst | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 docs/nodice/mana.rst diff --git a/docs/nodice/mana.rst b/docs/nodice/mana.rst new file mode 100644 index 0000000..4c7c439 --- /dev/null +++ b/docs/nodice/mana.rst @@ -0,0 +1,5 @@ +============================ + From Rano Raraku to Orongo +============================ + +There and back to see how far it is. From dce7efadd86712938f84ece513065c2a15d1a10e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 14 Oct 2017 15:50:12 -0300 Subject: [PATCH 086/642] going for a song --- docs/nodice/redemption.rst | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 docs/nodice/redemption.rst diff --git a/docs/nodice/redemption.rst b/docs/nodice/redemption.rst new file mode 100644 index 0000000..9f0f1d2 --- /dev/null +++ b/docs/nodice/redemption.rst @@ -0,0 +1,5 @@ +====== + Song +====== + +Going for a song. From be71096c2f9aef72f8065ff266403a990009fd45 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 14 Oct 2017 15:50:39 -0300 Subject: [PATCH 087/642] n green bottles dancing in a pool --- docs/nodice/bottle.rst | 101 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 docs/nodice/bottle.rst diff --git a/docs/nodice/bottle.rst b/docs/nodice/bottle.rst new file mode 100644 index 0000000..6837539 --- /dev/null +++ b/docs/nodice/bottle.rst @@ -0,0 +1,101 @@ +==================================== + N green bottles, dancing in a pool +==================================== + +It started with none. + +It was good. A place to relax with noodles too. + +And then a construction of plastic and trash. + +With green pipes of water and noodles too. + +A bottle of water, a fountain for you. + +A crystal garden, a giant storm. + +A mountain fountain, pure and cold. + +Into the bottle, warm in the rays. + +Then trickle and flow to the swamp down below. + +Cascade down the pillar, the green can too. + +Flow through the towel, in harmony. + +Out of the noodle into the pool. + +Driving the wheel, beating the mana. + +Spinning and stopping, starting and sleeping. + +Back in the mountains, giant bowls of ice. + +Plastic and paper, even some rice + +Mixing and syncing ready to pour. + +Adding more water + +Bucket by bucket + +2 weeks of learning and still figuring it out. + +One +=== + +Guests came to visit, we sat by the pool and talked of how ice can +turn into energy to power a digital phone. + +Of pi and micro, bit and byte. + +And they brought water, bubbles too. + +Mostly of green but some yellow or orange. + +Up in the mountains, in great lakes of ice. + +One day I took one for a float in the pool. + +Sat in the sun, with waves all around. + +Opened the bottle, and now we had pool + 1. + +Slowly the gas left. + +30 minutes, ready to sync. + +And off it went to walk to orongo. + +1 + 1 +===== + +Once you have one then you have left the beginning. Divide by the +previous and you throw an exception. + +The hare must add 1, so now there are two. + +Green bottles walking in my pool. + +1 + 1 + 1 +========= + +The hare is away and now there are three. + +This one took a while to get from the quary. + +But ran down to join the other two. + +The tortoise is resting, it is feeling the heat. + +Drained by the talk of the hare. + +2 o 2 +===== + +With three you can get four and all kinds of two. + +And four sets of three with one to score. + + From e3a551dbca54d5e62359bb213cbaa99b8fec7f3e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 14 Oct 2017 16:22:26 -0300 Subject: [PATCH 088/642] bottles moons and planets dont forget the sunshine --- docs/nodice/bottle.rst | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/docs/nodice/bottle.rst b/docs/nodice/bottle.rst index 6837539..b51c9b6 100644 --- a/docs/nodice/bottle.rst +++ b/docs/nodice/bottle.rst @@ -91,6 +91,8 @@ The tortoise is resting, it is feeling the heat. Drained by the talk of the hare. +The sun the moon and the earth. + 2 o 2 ===== @@ -98,4 +100,23 @@ With three you can get four and all kinds of two. And four sets of three with one to score. +1 + 1 + 1 + 1 + 1 +================= + +Mars, Venus too, or is it mercury? + + +2 + 2 + 2 = 3 + 3 +================= + +Here comes Jupyter? + +ones, twos and threes. + + +1 + 1 + 1 + 1 + 1 + 1 + 1 +========================= + +Seven akivi. +One for each day. From c340b7bc88ebf875943d70aa7f67ba6c6b4ef329 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 14 Oct 2017 16:27:23 -0300 Subject: [PATCH 089/642] chains the ties that bind --- docs/nodice/chains.rst | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 docs/nodice/chains.rst diff --git a/docs/nodice/chains.rst b/docs/nodice/chains.rst new file mode 100644 index 0000000..f30c2fb --- /dev/null +++ b/docs/nodice/chains.rst @@ -0,0 +1,5 @@ +==================== + The ties that bind +==================== + +When the unity meets the noise. From c466ad6e5fe2d47452607025fdf55dc4850788a7 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 14 Oct 2017 18:22:07 -0300 Subject: [PATCH 090/642] rainbow block chain forecast status quo --- docs/nodice/chains.rst | 10 ++++++++++ docs/nodice/weirdo.rst | 15 +++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/docs/nodice/chains.rst b/docs/nodice/chains.rst index f30c2fb..074f6c4 100644 --- a/docs/nodice/chains.rst +++ b/docs/nodice/chains.rst @@ -3,3 +3,13 @@ ==================== When the unity meets the noise. + +Make a forecast. + +Scramble it up. + +On a block chain with a good time stamp. + +Wait for the date open the time capsule. + +Is it closer than status quo ad infinitum? diff --git a/docs/nodice/weirdo.rst b/docs/nodice/weirdo.rst index d780ea9..93e3314 100644 --- a/docs/nodice/weirdo.rst +++ b/docs/nodice/weirdo.rst @@ -181,6 +181,21 @@ So suddenly secrets are there in the paper. Collecting it all, but missing the pearls. +Red white and blue +================== + +It has been a strange journey with a rainbow of colours. + +The beginnings they echo the python moves strong. + +And easier and easier to do what we dreamed of. + +But harder and harder to please. + +For fear of computers that we can't control. + +And only a form to update. + qotd:: Well, I really want to encourage a kind of fantasy, a kind of From 2f920d1992a674ccbffd1589eae264f781295381 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 14 Oct 2017 19:25:00 -0300 Subject: [PATCH 091/642] jupyter puts things together and so does ubuntu --- docs/nodice/bottle.rst | 16 ++++++++++++++-- docs/nodice/snowy.rst | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/docs/nodice/bottle.rst b/docs/nodice/bottle.rst index b51c9b6..30714c9 100644 --- a/docs/nodice/bottle.rst +++ b/docs/nodice/bottle.rst @@ -103,13 +103,14 @@ And four sets of three with one to score. 1 + 1 + 1 + 1 + 1 ================= -Mars, Venus too, or is it mercury? +mars venus mercury +earth sun 2 + 2 + 2 = 3 + 3 ================= -Here comes Jupyter? +Here comes the moon, too soon or not? ones, twos and threes. @@ -117,6 +118,17 @@ ones, twos and threes. 1 + 1 + 1 + 1 + 1 + 1 + 1 ========================= + +Jupyter puts ones together. + +in twos and threes + +and fours and more or less + + +2 + 2 + 2 + 2 = 4 + 4 +========================= + Seven akivi. One for each day. diff --git a/docs/nodice/snowy.rst b/docs/nodice/snowy.rst index 9d1f4d1..4709ac1 100644 --- a/docs/nodice/snowy.rst +++ b/docs/nodice/snowy.rst @@ -47,4 +47,37 @@ You can greet with a nose, but then you can go. I'll watch you play with the interpretter lock. +Ubuntu +====== +Snowy has a home the sun and a garden to play. + +Cupboards for sleep and boxes too. + +And a pool of green bottles with one of blue. + +Along comes piri, the tiny cat pi-rate. + +Its the best name ever but I cant pronounce it. + +So snowy lets piri explore. + +Wathing him go, see what he needs. + +He's had a long journey, from who knows where. + +He's hungry to eat but eager to retreat. + +So he hurries the food and hides outside. + +The humans are sleeping, the crazy people. + +But when they're here and on form and listening to us. + +We dance and sleep and cherish the love. + +Snowy is happy, he has what he needs. + +Pull up a couch, just dont take his space. + +But share the ubuntu with everyone here. From 28f2a24ebe708fd904f92ce408ab5f1a734445e1 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 14 Oct 2017 19:35:48 -0300 Subject: [PATCH 092/642] sevens and eights on saturdays --- docs/nodice/bottle.rst | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/nodice/bottle.rst b/docs/nodice/bottle.rst index 30714c9..9ea7e61 100644 --- a/docs/nodice/bottle.rst +++ b/docs/nodice/bottle.rst @@ -125,10 +125,16 @@ in twos and threes and fours and more or less +or the seven akivi + 2 + 2 + 2 + 2 = 4 + 4 ========================= -Seven akivi. +Eight lines of rongo rongo, or 16 if you flip. + +Days and weeks + +Moons and more. -One for each day. +Saturdays too, a day to play. From 22e00d77c1d566b72c27914be86e665a2d40a865 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 14 Oct 2017 19:46:57 -0300 Subject: [PATCH 093/642] snowy 4 ubuntu --- docs/nodice/weirdo.rst | 44 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/docs/nodice/weirdo.rst b/docs/nodice/weirdo.rst index 93e3314..16e7774 100644 --- a/docs/nodice/weirdo.rst +++ b/docs/nodice/weirdo.rst @@ -196,6 +196,50 @@ For fear of computers that we can't control. And only a form to update. +Snowy4 +====== + +Ed Snowden, citizen 4. + +I never saw that one coming. + +I read all the articles, watched citizen 4. + +Favourite scene? The blanket mantle of power. + +Seeing both sides, from inside and out. + +Trying to figure how we got here. + +Karma Pi grew out of that. What belongs in the open and how can it be +shared? + +Networks of trust. + +Ubuntu and python, redhat and sunos. Suse, debian, arch now too. Pick your own +name. + +Each goes at its pace, but finding its rhythm. + +And sharing the work of sharing the trust. + +But then there is the data and its everywhere. + +Protected by password but in an sec report. + +The data? Safe as houses. + +Pick your design, but find one with bridges. + +Greenwald talking a block from a home. + +This should be interesting. It was. + +Whatever Ed did he got a fair press. At least from the ones that he +trusted the most. + + + qotd:: Well, I really want to encourage a kind of fantasy, a kind of From 0206c5b073a8a90e42e2aaf69f45d5f46c6d5ca8 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 15 Oct 2017 11:57:58 -0300 Subject: [PATCH 094/642] new readme at rest karma pi vision --- README.rst | 47 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/README.rst b/README.rst index bc26a37..cdad92d 100644 --- a/README.rst +++ b/README.rst @@ -2,11 +2,52 @@ Karma Pi ========== -Karma pi is a place to come to find tools to help turn data into information. +Time for an update, things moving along. -Tools to help visualise and explore that data. Tools that come with *python* batteries included. +Bits slowly evolving as time passes by. + +Finding the core, 3.6, idle, async await. + +Data and plotting and models to fit. + +Forecasts to make, but how to share? + +This is a place to share my ideas. + +Forks are welcome, don't be afraid. + +Check the commit log, what catches your eye? + +Click on the delta, see what changed? + +What was I doing and why might it matter? + +A checksum from git, to log a commit. + +A seed from a chain to see if it runs. + +And a checksum with zeroes to see if its right. + +Collect the statistics a map reduce. + +And check the statistics with the same zero sum. + +Rewarding the miners with information. + +Combining the skill of the players. + +With their shared observations in time. + +A commit with a future, when will its time be? + +Karma pi -- tools to help people of all ages to explore our world. + +Working with python, pi and jupyter. + +On earth and beyond, to look to the future. + +Out will come what we put in, with feedback learning and value therein. -Tools to help people of all ages to explore our world. Get out what you put in ======================= From 6170ca34b3f9ae2c4aa2cab0cba45b906ea5cb0d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 15 Oct 2017 12:43:40 -0300 Subject: [PATCH 095/642] missing rabbits --- docs/nodice/mg.rst | 197 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 docs/nodice/mg.rst diff --git a/docs/nodice/mg.rst b/docs/nodice/mg.rst new file mode 100644 index 0000000..419e40d --- /dev/null +++ b/docs/nodice/mg.rst @@ -0,0 +1,197 @@ +============================ + MJ and the missing rabbits +============================ + +MG or is it MJ, or maybe MS. + +There's always BT too. + +You had the flu? + +Or was it uno? + +Or maybe even a gland in a fever? + +y2k wtf? + +easter lily + +march to glass heaven + +cold in d4 + +down by the school house + +and off to the park of the croak + +stoped in a pub + +fed guinness to fever + +and stood with a scot + +to the soldier's song. + +Lilly white and the blues. + +Water, ford and wex with kill dare? + +And always another. + +Off to the doctor. + +Mono you've got but we'll check with a dot. + +Euro 2000, not so bad. + +And cricket from england, a test or two. + +2001, y2k gone, but wait what on november the 9th? + +Or was that 2017? + +Back to 2005 + +yBefore Katrina but after Jeanne. + +With Charlie and Ivan away in a gulf. + +Eyes like a pirate + +You better see tub or dee. + +MS, MJ or was it MR? + +Missing Rabbits you see. + +They hang on to your knee + +But can't keep hold. + +They're there but not working + +Because of the stress + +There's this thing mysty non + +That cure's it you see. + +Well not quite cure, but calms it down. + +Tells the rabbits to chill, wait around for a while. + +Sunny in the field, foxes asleep. + +And rabbits start working, slowly at first. + +After a while, not quite so good. + +Rabbits are stressed, time for a nap. + +Wake up and mysty non. + +That's not so bad. + +But the I's were still crossed + +And the T's were dotted. + +So here's some ivy gee. + +Worst cold ever + +Sore head too. + +Eyes still quite wonky + +But the teas are good. + +Met with the students + +Studied as subject + +Tub and Dee magic gave me fine hope + +And predny some was added to the mix + +And the I's were back again. + +Has a thigh to preen, goes for a run. + +And back on the slope. + +Snowy is here + +Hills for miles. + +Fly down the slope + +Wait for a while and cry + +Five years on back to the sun. + +MJ is here. + +Sunshine at school + +An egg but joke. + +With Snowy by the pool. + +Helping me hear, helping me see. + +Hurting inside, but glowing with pride. + +Princess Cricket + +Queen of soccer. + +Ball at her feet. + +Puck on the tape. + +E an R + +P and S + +and D for a to z + +The Snowy 4 comes on the scene. + +Oh my I forgot about that. + +Of course that's what might happen. + +Now four year's later the emails leak + +The secret background check + +For sale on inter weebs + +The film or the tape, a digital rape. + +Who knows what is what and what is true? + +It is who you listen too. + +And who is listening to you + +Are they with you? + +Or against? + +Are you listening too? + +How big is the file? + +Is it still growing? + +And will they use it? + +Lots of good fortune + +How can you use it? + +Open or secret? + +There's not much in between. From 2bfb0ae8937f6f1e3f9c25487c7cc0a6c0fffc63 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 15 Oct 2017 13:01:58 -0300 Subject: [PATCH 096/642] binary stars private eye style --- docs/nodice/bistar.rst | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 docs/nodice/bistar.rst diff --git a/docs/nodice/bistar.rst b/docs/nodice/bistar.rst new file mode 100644 index 0000000..79282f0 --- /dev/null +++ b/docs/nodice/bistar.rst @@ -0,0 +1,11 @@ +============== + Binary Stars +============== + +BMG - BMRG + +ER - B - PE + + + + From 47bc8161dc3344ef6aaf3c14e2a077569e3a31e5 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 15 Oct 2017 19:29:50 -0300 Subject: [PATCH 097/642] covfefe cafedeaf and fuusball moments --- docs/nodice/cafedeaf.rst | 82 ++++++++++++++++++++++++++++++++++++++++ docs/nodice/fuusball.rst | 1 + 2 files changed, 83 insertions(+) create mode 100644 docs/nodice/cafedeaf.rst create mode 120000 docs/nodice/fuusball.rst diff --git a/docs/nodice/cafedeaf.rst b/docs/nodice/cafedeaf.rst new file mode 100644 index 0000000..9ce450e --- /dev/null +++ b/docs/nodice/cafedeaf.rst @@ -0,0 +1,82 @@ +========= + Covfefe +========= + +Saturday morning 2004. + +Snowy and Sooty in the kitchen. + +Kettle boils, pour the covfefe. + +Into the bodum. + +Add milk to the mugs and onto the tray. + +No clothes to the bedroom + +A start to the day + +Not a good idea + +Into the shower + +That one is hot + +Try the other + +My that looks hot + +Where is the doctor? + +Nace the say, lets start a race. + +Track pants and t-shirt + +Across the bog + +Driven by ER at just the right pace. + +Hitting the bumbs but riding the wave + +Into nace and check in time. + +Name rank and number + +And on to the gurney. + +Covered in snow and more to swallow. + +Now not so bad, but off to st james. + +Man U on the radio, high as can be. + +No news of the blades, how can it get? + +Into a bed and laid there to rest. + +Doctor will come on monday best. + +Monday and heads they do shake. + +Tuesday a cut we will make. + +Woken with staples. + +And a patch on the leg. + +Trying to gage the size of the problem. + +10 days and I am home. + +pygtk to the rescue + +Docs on a mem stick, 64 * n b. + +Cafe deaf is the ailment. + +A magic hex incantation. + +However you mess + +It stays there to wake you. + diff --git a/docs/nodice/fuusball.rst b/docs/nodice/fuusball.rst new file mode 120000 index 0000000..60130c1 --- /dev/null +++ b/docs/nodice/fuusball.rst @@ -0,0 +1 @@ +jng@gal2.1764:1508082854 \ No newline at end of file From 280cbd6ba91cf006b124e2c5d186f24c363dc3f2 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 15 Oct 2017 20:34:12 -0300 Subject: [PATCH 098/642] ascii foos ball --- docs/nodice/fuusball.rst | 121 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 120 insertions(+), 1 deletion(-) mode change 120000 => 100644 docs/nodice/fuusball.rst diff --git a/docs/nodice/fuusball.rst b/docs/nodice/fuusball.rst deleted file mode 120000 index 60130c1..0000000 --- a/docs/nodice/fuusball.rst +++ /dev/null @@ -1 +0,0 @@ -jng@gal2.1764:1508082854 \ No newline at end of file diff --git a/docs/nodice/fuusball.rst b/docs/nodice/fuusball.rst new file mode 100644 index 0000000..fb82b9a --- /dev/null +++ b/docs/nodice/fuusball.rst @@ -0,0 +1,120 @@ +========== + FOO SBALL +========== + + +A foosball table in the kitchen + +2014 October the nth. + +Hurricane Fay, a saturday night. + +Tropical storm at a 100 miles. + +No need to bother bermuda strong. + +Woke a night snow in fright. + +A bang a clout + +Cedar bent at pi by 3 + +Lights gone out + +Back to bed. + +Up at 8 + +Go for a walk + +Trees down + +Saws run + +Cables down, a flash at a pole. + +Off to the north + +To swear to the queen + +But the bird wont fly + +Til the runways dry + +Back the next day + + + +Off to the cold + +The red and white + +O canada + +A new birthday in the maple land. + +Back for gonzalo + +No power, a guitar and the snow. + +Tips from friends + +To save a life. + +Changing the strings and playing guitar + +Amazing grace + +As tree frogs daze. + +Back for more, a crash behind. + +Another big tree, takes a knee. + +No power for a month + +A tiny move 5 * 3 to 13, lucky for some. + +Snowy is here, now three years on. + +3.14... to a transcendental heaven + +Here is Piri, dividing by pi. + +You said that you wished you'd handled it better + +But for me you would make an exception. + +Another letter, from a proxy. + +I see what you do. + +Well here's a filly, I hope you use it. + +For if you don't you'll surely lose it. + +The rules have changed, the game is new. + +Skill is required and judgement too. + +But mostly skill and a vision. + +Do you have it in you then join me too. + +Fork and pull, push add commit. + +Add some more, commit and push. + +commit and push + +a status check + +a diff is good + +and there's always git show. + +I now I'm a git + +I'm a Sheffield boy + +Born at the zoo with only one dog. From c3870c0a4ffe478e3aa07f760878f21ce46014eb Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 15 Oct 2017 20:38:57 -0300 Subject: [PATCH 099/642] born at the zoon with only one dog --- docs/nodice/fuusball.rst | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/docs/nodice/fuusball.rst b/docs/nodice/fuusball.rst index fb82b9a..fa09e36 100644 --- a/docs/nodice/fuusball.rst +++ b/docs/nodice/fuusball.rst @@ -71,7 +71,21 @@ Back for more, a crash behind. Another big tree, takes a knee. -No power for a month +No power but torches and henry viii + +Away at a friends + +Walking the dog that never walks far + +Feeding the cat that never is seen + +Blood on the carpet + +No word from good company + +But letters lawyers + +Power at home A tiny move 5 * 3 to 13, lucky for some. @@ -97,9 +111,19 @@ The rules have changed, the game is new. Skill is required and judgement too. -But mostly skill and a vision. +But mostly skill and a vision and an honest heart. + +Good, better, best. + +Will you ever be good? + +Surely can be better, + +But the better wont be best until you share with the rest. + +Stop with the proxies. -Do you have it in you then join me too. +Do you have it in you then join me too? Fork and pull, push add commit. @@ -113,7 +137,7 @@ a diff is good and there's always git show. -I now I'm a git +I know I'm a git I'm a Sheffield boy From 04630b7435a4e958c954f971b7e022db9239a0f4 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 15 Oct 2017 20:55:58 -0300 Subject: [PATCH 100/642] absent friends --- docs/nodice/fuusball.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/nodice/fuusball.rst b/docs/nodice/fuusball.rst index fa09e36..eafcebd 100644 --- a/docs/nodice/fuusball.rst +++ b/docs/nodice/fuusball.rst @@ -103,6 +103,8 @@ Another letter, from a proxy. I see what you do. +Home from the hospital, do you care? + Well here's a filly, I hope you use it. For if you don't you'll surely lose it. From df5db1ad16dd5cde4e355eacaeb24bd0baed589a Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 15 Oct 2017 21:36:19 -0300 Subject: [PATCH 101/642] book on a journey geb and gcb --- docs/nodice/geb.rst | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 docs/nodice/geb.rst diff --git a/docs/nodice/geb.rst b/docs/nodice/geb.rst new file mode 100644 index 0000000..6485c88 --- /dev/null +++ b/docs/nodice/geb.rst @@ -0,0 +1,21 @@ +=================== + Godel Escher Back +=================== + +The book from the 80's. + +Saturday book shop. + +I read it once for the ants, the hare and the tortoise. + +I read for godel and escher too. + +I didn't do music, but racacar was fun. + +Palindrome patterns in time. + +I'll read it again, this time for bach. + +And maybe I will lend it like K lahrs Lohn + +To infinity slalom and magic beyond. From 7a0e9c6dbe82b9abd26188711ec0d50655b7664d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 15 Oct 2017 22:06:58 -0300 Subject: [PATCH 102/642] redemption song --- docs/nodice/redemption.rst | 46 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/docs/nodice/redemption.rst b/docs/nodice/redemption.rst index 9f0f1d2..7e74ffd 100644 --- a/docs/nodice/redemption.rst +++ b/docs/nodice/redemption.rst @@ -3,3 +3,49 @@ ====== Going for a song. + +Karma for free. + +Mana too. + +Puzzles galore. + +And a vision. + +When all is gone + +We have unity + +Help the down stream + +And plot with a rainbow + +Pandas for data + +And Jupyter connects us all. + +With git and bash and python 3 6 + +It's all you need in the karma pi class. + +Requirements are there, but they are advisory + +I should do a release, so go read my README at rest. + +Start at the top, git log README.rst + +git log too, see what's there. + +docs are nodice + +but that is a rongo rongo tale. + +No start and no end + +But start anywhere + +Follow the commit if lost in a forest. + +Round and round, branch and fork. + +I should do release, let's give it a name. From 9d6715c59e3add2bc6057d15d78a7f4a7377f97a Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 16 Oct 2017 00:53:18 -0300 Subject: [PATCH 103/642] topn words --- karmapi/words.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 karmapi/words.py diff --git a/karmapi/words.py b/karmapi/words.py new file mode 100644 index 0000000..563ee40 --- /dev/null +++ b/karmapi/words.py @@ -0,0 +1,42 @@ +""" count words +""" + +from collections import Counter + +from pathlib import Path + +import argparse + +parser = argparse.ArgumentParser() + +parser.add_argument('path', nargs='+') + +parser.add_argument('--glob', default='**/*.rst') + +args = parser.parse_args() + + +totals = Counter() + +for path in args.path: + print(path) + for name in Path(path).glob(args.glob): + + print(name) + + counts = Counter() + + counts.update(name.open().read().split()) + + print(counts.most_common(5)) + print(sum(counts.values())) + print() + + totals.update(counts) + +print('Totals:') + +print(totals.most_common(20)) + +print(sum(totals.values())) + From 8025210e3ffabeace0ae5a7afaa8c42bac8c9aaf Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 16 Oct 2017 01:30:04 -0300 Subject: [PATCH 104/642] words to orongo --- karmapi/orongo.py | 50 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 karmapi/orongo.py diff --git a/karmapi/orongo.py b/karmapi/orongo.py new file mode 100644 index 0000000..890542d --- /dev/null +++ b/karmapi/orongo.py @@ -0,0 +1,50 @@ +""" Convert to rongo rongo + +Sort of. + +Four suits. + +Still Rock Wobble Dance s r w d + +0-9 a b +""" + +from collections import Counter + +from pathlib import Path + +import argparse + +parser = argparse.ArgumentParser() + +parser.add_argument('path', nargs='+') + +parser.add_argument('--glob', default='**/*.rst') + +args = parser.parse_args() + + +totals = Counter() + +for path in args.path: + print(path) + for name in Path(path).glob(args.glob): + + print(name) + + counts = Counter() + + counts.update(name.open().read().split()) + + print(counts.most_common(5)) + print(sum(counts.values())) + print() + + totals.update(counts) + +print('Totals:') + +print(totals.most_common(20)) + +print(sum(totals.values())) + From e04199dc31f6b5bc08fe493ab5707e27da8531cb Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 16 Oct 2017 09:53:58 -0300 Subject: [PATCH 105/642] filly adjustment for ophelia --- karmapi/filly.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/karmapi/filly.py b/karmapi/filly.py index 48fd04a..ececfab 100644 --- a/karmapi/filly.py +++ b/karmapi/filly.py @@ -241,7 +241,7 @@ def __init__( self.skill = skill # estimate of market share - self.share = share + self.share = share or self.premium / 100. # Track agg loss and maxloss and error too, but throw in some salt igul = random.randint(1, 50) @@ -331,6 +331,7 @@ def score(self): jose = Event('jose', 1, 0.3), katia = Event('katia', 1, 0.3), nate = Event('nate', 1, 0.5), + ophelia = Event('ophelia', 2, 0.8), mexicoq = Event('mexico', 25, 0.5), calfire = Event('calfire', 10, 0.8), ) From 2b4a98d79d6eb29fb02ed2ddcd893b8ed70e4ca8 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 16 Oct 2017 18:18:01 -0300 Subject: [PATCH 106/642] call it orongo sh dc cant reverse a stir --- karmapi/orongo.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/karmapi/orongo.py b/karmapi/orongo.py index 890542d..ad527f8 100644 --- a/karmapi/orongo.py +++ b/karmapi/orongo.py @@ -4,7 +4,7 @@ Four suits. -Still Rock Wobble Dance s r w d +Still Rock Wobble Dance s r w d SH DC ? 0-9 a b """ @@ -15,6 +15,12 @@ import argparse +def orongo(data): + """ Spin it around """ + + return data.reverse() + + parser = argparse.ArgumentParser() parser.add_argument('path', nargs='+') @@ -25,6 +31,7 @@ totals = Counter() +ototals = Counter() for path in args.path: print(path) @@ -34,13 +41,19 @@ counts = Counter() - counts.update(name.open().read().split()) + data = name.open().read() + counts.update(data.split()) + totals.update(counts) + + rongo = orongo(data) + counts = Counter(rongo) + + print('rongo') print(counts.most_common(5)) print(sum(counts.values())) print() - totals.update(counts) print('Totals:') From 54d6f8fb2886aa0070a9f694b344529d0a34ff1b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 16 Oct 2017 19:29:02 -0300 Subject: [PATCH 107/642] print the hash and put it into reverse orongo --- karmapi/orongo.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/karmapi/orongo.py b/karmapi/orongo.py index ad527f8..8086a7f 100644 --- a/karmapi/orongo.py +++ b/karmapi/orongo.py @@ -15,10 +15,16 @@ import argparse +import math + +import random + def orongo(data): """ Spin it around """ + print(data.__hash__()) + + return reversed(data) - return data.reverse() parser = argparse.ArgumentParser() From 2655aaa7d72c2b0049a120bd52c9804645571381 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 16 Oct 2017 19:36:53 -0300 Subject: [PATCH 108/642] magic screen shot from wiki pedia --- docs/nodice/rongo.png | Bin 0 -> 271933 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/nodice/rongo.png diff --git a/docs/nodice/rongo.png b/docs/nodice/rongo.png new file mode 100644 index 0000000000000000000000000000000000000000..7b50207dbe7389bd8fc86ff240dc5804e7e31318 GIT binary patch literal 271933 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 z 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 literal 0 HcmV?d00001 From 2aae9b43728ac5a6fe12c8aff317ab25eab3f249 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 16 Oct 2017 19:45:57 -0300 Subject: [PATCH 109/642] wiki pedia debt --- docs/nodice/wikipedia.rst | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 docs/nodice/wikipedia.rst diff --git a/docs/nodice/wikipedia.rst b/docs/nodice/wikipedia.rst new file mode 100644 index 0000000..c1f563d --- /dev/null +++ b/docs/nodice/wikipedia.rst @@ -0,0 +1,17 @@ +============ + Quick Feet +============ + +Message to wikipedia is looking for donations. + +I am in debt there, to be sure. + +$20 and a greasy chip butty edit. + +And in return lifetimes of words and pictures. + +Thanks wikipedia, one of the best. + +wiki pedia, wiki wiki, quick feet, many legs. + +made with whales. From eaec05d515bee90bf35388951397279c9e2abcba Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 16 Oct 2017 20:47:18 -0300 Subject: [PATCH 110/642] wiki pedia magic words --- docs/nodice/wikipedia.rst | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/nodice/wikipedia.rst b/docs/nodice/wikipedia.rst index c1f563d..0dea16f 100644 --- a/docs/nodice/wikipedia.rst +++ b/docs/nodice/wikipedia.rst @@ -14,4 +14,7 @@ Thanks wikipedia, one of the best. wiki pedia, wiki wiki, quick feet, many legs. -made with whales. +made with whales + +g5md4rj7ca +. From 81f6770524a31468be68fcde14b59a8579de2fbe Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 16 Oct 2017 21:57:18 -0300 Subject: [PATCH 111/642] the name of the cat in box at the gate --- docs/nodice/et.rst | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 docs/nodice/et.rst diff --git a/docs/nodice/et.rst b/docs/nodice/et.rst new file mode 100644 index 0000000..05077c5 --- /dev/null +++ b/docs/nodice/et.rst @@ -0,0 +1,43 @@ +================================ + The cat in the box on the gate +================================ + +What was its name? + +It waited each day. + +4pm or was it 4 and forty? + +Jack a nory, what a story? + +Home from school. + +On the carpet. + +Rhythm of a voice. + +Willie Wonker, Bernard Cribbins. + +Music too, but what are the words? + +What does it mean? Why does it matter? + +What do they know and hope to show? + +I didnt know then + +Nor do I now. + +With every answer, another puzzle. + +A bus stop shelter + +With a railway sign. + +No railway platform + +A train on the way + +With ET and S + +And the cat in the box at the gate. From 82e2bffb3a2c8651d3c1a8d19da8cba0a5b38438 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 16 Oct 2017 21:59:48 -0300 Subject: [PATCH 112/642] ET S and R, F and U at the tcm --- docs/nodice/et.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/nodice/et.rst b/docs/nodice/et.rst index 05077c5..fb43ed4 100644 --- a/docs/nodice/et.rst +++ b/docs/nodice/et.rst @@ -38,6 +38,8 @@ No railway platform A train on the way -With ET and S +With ET and S R and others + +F and U await at tcm. And the cat in the box at the gate. From d68ac917173b01b990e954899cc6cc1b80429c10 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 16 Oct 2017 22:04:02 -0300 Subject: [PATCH 113/642] recursive edit of git log .. ok just a screenshot --- docs/nodice/215948.png | Bin 0 -> 201946 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/nodice/215948.png diff --git a/docs/nodice/215948.png b/docs/nodice/215948.png new file mode 100644 index 0000000000000000000000000000000000000000..d2f16f7d2e9e3f9837f7708f0f6b4ca26357f46a GIT binary patch literal 201946 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
na%(tO&ou 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
sOP@>epud7W0hN&PKm+fp|+Fd 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 literal 0 HcmV?d00001 From f24441a9c3aa6d72a655633ccf50ef5dccd4e624 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 16 Oct 2017 22:17:47 -0300 Subject: [PATCH 114/642] round and round days weeks and months in rongo rongo land --- karmapi/orongo.py | 71 +++++++++++++++++++++++++++++++---------------- 1 file changed, 47 insertions(+), 24 deletions(-) diff --git a/karmapi/orongo.py b/karmapi/orongo.py index 8086a7f..aea9f49 100644 --- a/karmapi/orongo.py +++ b/karmapi/orongo.py @@ -15,55 +15,78 @@ import argparse -import math +from math import pi, e import random +YEAR = 1 + +MONTH = 4 + +WEEK = 52 + +DAY = 7 + +EMONTH = (DAY * MONTH) / (pi * e) + +EYEAR = 0.25 / (DAY * WEEK) + def orongo(data): """ Spin it around """ print(data.__hash__()) return reversed(data) +def alpha(image): + """ Pick symbols from an image """ + + for season in range(MONTH): + for week in range(MONTH): + for day in range(DAY): + # pick up a pick up a pixel or many from image + yield None + + +if __name__ == '__main__': -parser = argparse.ArgumentParser() + parser = argparse.ArgumentParser() -parser.add_argument('path', nargs='+') + parser.add_argument('path', nargs='+') -parser.add_argument('--glob', default='**/*.rst') + parser.add_argument('--glob', default='**/*.rst') -args = parser.parse_args() + args = parser.parse_args() -totals = Counter() -ototals = Counter() + totals = Counter() + ototals = Counter() -for path in args.path: - print(path) - for name in Path(path).glob(args.glob): + for path in args.path: + print(path) + for name in Path(path).glob(args.glob): - print(name) + print(name) - counts = Counter() + counts = Counter() - data = name.open().read() - counts.update(data.split()) - totals.update(counts) + data = name.open().read() + counts.update(data.split()) + totals.update(counts) - rongo = orongo(data) - counts = Counter(rongo) + rongo = orongo(data) + counts = Counter(rongo) - print('rongo') - print(counts.most_common(5)) - print(sum(counts.values())) - print() + print('rongo') + print(counts.most_common(5)) + print(sum(counts.values())) + print() -print('Totals:') + print('Totals:') -print(totals.most_common(20)) + print(totals.most_common(20)) -print(sum(totals.values())) + print(sum(totals.values())) From 0eb6f37fdac6c200c4d399147048296a1bc5cc72 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 16 Oct 2017 22:45:58 -0300 Subject: [PATCH 115/642] round and round some more with pie --- karmapi/orongo.py | 43 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/karmapi/orongo.py b/karmapi/orongo.py index aea9f49..fb2c03d 100644 --- a/karmapi/orongo.py +++ b/karmapi/orongo.py @@ -19,6 +19,10 @@ import random +from PIL import Image + +PIE = pi * e + YEAR = 1 MONTH = 4 @@ -27,24 +31,45 @@ DAY = 7 -EMONTH = (DAY * MONTH) / (pi * e) +EMONTH = (DAY * MONTH) / PIE EYEAR = 0.25 / (DAY * WEEK) -def orongo(data): + +def orongo(data, alpha=None): """ Spin it around """ + + if alpha is None: + alpha = list(range(52)) + print(data.__hash__()) + print(len(key)) + return reversed(data) -def alpha(image): - """ Pick symbols from an image """ +def alpha( + key=None, + xgap=None, + ygap=None, + gap=None): + """ Pick symbols from an image + + Mind the gaps. + """ + key = Path(key) + + image = Image.open(str(key)) + print(image.size) + + width, height = image.size + xgap = xgap or (width / PIE) for season in range(MONTH): for week in range(MONTH): for day in range(DAY): # pick up a pick up a pixel or many from image - yield None + yield @@ -54,11 +79,14 @@ def alpha(image): parser.add_argument('path', nargs='+') + parser.add_argument('--key') + parser.add_argument('--glob', default='**/*.rst') args = parser.parse_args() - + key = list(alpha(args.key or 'rongo.png')) + totals = Counter() ototals = Counter() @@ -74,8 +102,7 @@ def alpha(image): counts.update(data.split()) totals.update(counts) - - rongo = orongo(data) + rongo = orongo(data, alpha=key) counts = Counter(rongo) print('rongo') From 54e26b7c01acfe6c94a0dc3a012c8bf5542be2d6 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 16 Oct 2017 23:45:57 -0300 Subject: [PATCH 116/642] princess cricket play fools ball --- docs/nodice/fuusball.rst | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/docs/nodice/fuusball.rst b/docs/nodice/fuusball.rst index eafcebd..c096b8b 100644 --- a/docs/nodice/fuusball.rst +++ b/docs/nodice/fuusball.rst @@ -83,10 +83,22 @@ Blood on the carpet No word from good company -But letters lawyers +But letters from lawyers + +Repor a version + +Urban Nigel, Urban Legend. + +A c^T not a friendly cat + +Late to report + +Borrowing from the future Power at home +6 11 off to the hospital + A tiny move 5 * 3 to 13, lucky for some. Snowy is here, now three years on. @@ -119,6 +131,14 @@ Good, better, best. Will you ever be good? +Start with a prior + +I'm princess cricket + +A road of forks + +A tree of love + Surely can be better, But the better wont be best until you share with the rest. From c2e693eb390546c92dba24f1708c1e6f602476f3 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 17 Oct 2017 00:38:41 -0300 Subject: [PATCH 117/642] bump version start series 7 juggle mains orongo tankrain currie --- karmapi/orongo.py | 7 +++++-- setup.py | 8 ++------ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/karmapi/orongo.py b/karmapi/orongo.py index fb2c03d..319a679 100644 --- a/karmapi/orongo.py +++ b/karmapi/orongo.py @@ -73,8 +73,8 @@ def alpha( -if __name__ == '__main__': - +def main(): + parser = argparse.ArgumentParser() parser.add_argument('path', nargs='+') @@ -117,3 +117,6 @@ def alpha( print(sum(totals.values())) +if __name__ == '__main__': + + main() diff --git a/setup.py b/setup.py index 88dbdd5..369503a 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from codecs import open from os import path -__version__ = '0.6.1' +__version__ = '0.7.6.5.4.3.2.1' here = path.abspath(path.dirname(__file__)) @@ -32,13 +32,9 @@ ], entry_points = { 'console_scripts': [ - 'kpi = karmapi.kpi:main', - 'kpimage = karmapi.tools.image:main', 'tankrain = karmapi.tankrain:main', - 'checkmate = karmapi.checksum:main', - 'joy = karmapi.pigjoy:main', + 'orongo = karmapi.orongo:main', 'currie = karmapi.currie:main', - 'hush = karmapi.hush:main', ], }, keywords='data pi karma', From ec50c1ae79e2cced8a1c1155678c7819f0d9c496 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 17 Oct 2017 15:43:19 -0300 Subject: [PATCH 118/642] red and white or red and blue? --- docs/nodice/hallam.rst | 135 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 docs/nodice/hallam.rst diff --git a/docs/nodice/hallam.rst b/docs/nodice/hallam.rst new file mode 100644 index 0000000..c2f8d16 --- /dev/null +++ b/docs/nodice/hallam.rst @@ -0,0 +1,135 @@ +=============================== + Red and white or red and blue +=============================== + +Red and white, or red and blue, what's with blue and white? + +93 old td. + +Pesky solid, from 3m by pi + +See man hand + +Its in the net + +Or on the line + +No russians here + +It doesn't count. + +96 web burly + +Sausage man + +With crazy mullet + +40 yards, wait what no + +45 what a corker... + +Bassett's hounds are on the hunt + +Extra time + +Never a glimmer + +Home up the m1 + +Grand national fever + +Falls at the start line + +Winner not winner and runs again + +2015 bailey's and cream + +cricket fever + +the cat with the hat + +a pi and a stream of data + +blue boys arrive + +white in the middle + +red blue all around + +time for a swizzle + +but what of the score + +Quarter to seven + +20 runs + +3 wickets, or there abouts. + +Red and white, from bailey's bay + +7 and twenty and its now a draw. + +Scores all level a wicket or two. + +But why 7 20? Rule book time. + +Like Carlos Tivos and the west bacon fest? + +Happier times in 75 + +With brooking and tc, woodward too. + +But now its got wilder in 2016 + +Jack and his hat. + +The cat with a red and white hat. + +To the right, to the left. + +He'll head it all day. + +To cup match in somers, where the sun sets. + +2014 I guess. A red and blue draw. + +Its hot, lets keep the cup here. + +2017 near hallows eve. + +Up the M1 + +Like the hero TC + +For 200K in 76 + +So take 5-10 to the road of the elland + +And hope for a day like the one at the sty. + +A game of red and blue passion. + +With the magic all red + +With faint blue ripples. + +4 2 that will do. + +So over to to Euro last 8 + +For a place in moscow + +Without the US + +North iron or Swiss + +Croatio or Greece + +Denmark or Green + +Swede or Azure + +Let's watch the bottles and see what they say. + + From b087b5cefb890598ecbbfd2891d42617e8da25f6 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 17 Oct 2017 16:19:03 -0300 Subject: [PATCH 119/642] time for a gilectomy? --- docs/nodice/e2theipi.rst | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 docs/nodice/e2theipi.rst diff --git a/docs/nodice/e2theipi.rst b/docs/nodice/e2theipi.rst new file mode 100644 index 0000000..05812c3 --- /dev/null +++ b/docs/nodice/e2theipi.rst @@ -0,0 +1,35 @@ +============== + Johnny GILly +============== + +An nth root of e to the i pi. + +Now here is a thing. + +Let's say pi=3 and so does e. + +Now here is a thing. + +e *pi ~ 3 * 3 = 9 + +So add a bit and call it 10 or pie + +e ^ pi ^ e ~ pi ^ e ^ pi or 3 ^ 3 = 27 + +Add a bit and call it 30. + +Now 10 ^ 30 lets square it. + +That's 10 ^ 60 + +Or the size of the universe in planks. + +And the age of the universe in planks too. + +And the mass or the energy of the universe in planks as well. + +So maybe the plank isn't constant? + +It shrinks in time as the universe grows. + +If you live 1 degree by pi to the n, then how could you know? From 32076c84e69b0108666688b29212a93727083cdc Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 17 Oct 2017 16:20:21 -0300 Subject: [PATCH 120/642] plank mana karma time? --- docs/nodice/e2theipi.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/nodice/e2theipi.rst b/docs/nodice/e2theipi.rst index 05812c3..ba6fa70 100644 --- a/docs/nodice/e2theipi.rst +++ b/docs/nodice/e2theipi.rst @@ -32,4 +32,6 @@ So maybe the plank isn't constant? It shrinks in time as the universe grows. +Conserving the mana and sharing the karma. + If you live 1 degree by pi to the n, then how could you know? From a3097afa5e12bbd109e0065fe90f1fe6035af094 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 17 Oct 2017 22:04:37 -0300 Subject: [PATCH 121/642] be ware the ides of py, eric bach and ee max --- docs/nodice/pybeeidb.rst | 147 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 docs/nodice/pybeeidb.rst diff --git a/docs/nodice/pybeeidb.rst b/docs/nodice/pybeeidb.rst new file mode 100644 index 0000000..447f4a0 --- /dev/null +++ b/docs/nodice/pybeeidb.rst @@ -0,0 +1,147 @@ +================================ + Python bash emacs eric idle db +================================ + +Some characters here. + +myrtle and scarborough + +ecgbert + +Rogers and sport, maths and odds. + +Commercial too, snooker cue. + +A brillian Griffin taught me some math + +And showed me computers too. + +City and Guilds at the grange + +A modem to the poly + +a giant teletyper. + +murphy and mcgee + +newton and einstein + +Harper Lee too. + +Leamington Spa + +Zeeman + +Series + +Hawkes + +and + +the do nut man with a farm, O'Rourke. + +And Miles more + +And algol 66 + +Galois, fermat, Godel and Fourier too. + +A Poincare space. + +And Rubik's cube with monster groups. + +Cards to be punched + +Back in an hour + +expected semi colon the only error + +Chess with cards, quuens on boards + +n x n + +but oh the io + +caves in the pennines + +ireland too + +results in o'connors + +and the world's largest dish cloth + +easter in ireland + +bermuda umbrella + +Glass and Nevin + +Guinness and peace + +Back to computers of yore. + +Number one and XMP too. + +SunOs and unicos too. + +Emacs and bash + +C with more plusses. + +The STL will do. + +Python at last. + +lists and dicts + +but always build bridges + +so others can do things + +the way they learn to know. + +the first computer. it shows you wonders. + +Click with a mouse + +Or fingers on keyboard. + +Pretty much all no touch screen. + +And once you tame the beast its good enough. + +I should know. 30 years and more and still emacs. + +But I have tried it with IDLE the Eric of old or new. + +And that works for me. + +Thinking of DB in a deep lawyers basement. + +Typing python and finding 2.2. That will do nicely, thank you. + +That's a db that's Beazely with cookbook curios. + +Guido to guide and so many more. + +more fun to code in the open + +It helps focus the mind. + +Karma dividing by Pi + +Spreading it out. + +Until it goes below the noise. + +A quantum cat. + +Of blue and red and white stripes. + +And what of the Bee, the new Py Bee. + +Get on your phone no need to beware the IDES of Py. + + + + From d4efe74567669cbe215d79245f88cddab78b8f3a Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 17 Oct 2017 22:10:39 -0300 Subject: [PATCH 122/642] setting the rhythm with guido's clock --- docs/nodice/pybeeidb.rst | 43 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/docs/nodice/pybeeidb.rst b/docs/nodice/pybeeidb.rst index 447f4a0..7412605 100644 --- a/docs/nodice/pybeeidb.rst +++ b/docs/nodice/pybeeidb.rst @@ -142,6 +142,49 @@ And what of the Bee, the new Py Bee. Get on your phone no need to beware the IDES of Py. +Ubuntu too, for Snowy the Ubuntu cat. + +Upgrade today. + +Forgot it was running. + +Playing with light dm. + +Starting and stopping SD card reading. + +Naughty less. + +Flashing screen. + +No ctrl alt fn + +Over to gal1, wish ssh + +apt and nmap, htop too. + +ok we're running on gal2 + +stop the light dm + +get a gdm and an awesome wm + +hmmm.... just apt update and read the message + +dpkg with mystic incantation + +and apt upgrade, always sudo + +reboot or no? + +service start lightdm + +now usb and pictures too + +so ready for the tankrain rongo rongo show + +with guido's clock to set the time + +and all who are there to set the rhythm. From 7c0d7a06b7357909d01efcbefc8f2745efed73c5 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 17 Oct 2017 23:26:26 -0300 Subject: [PATCH 123/642] legal eagle --- docs/nodice/eagle.rst | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 docs/nodice/eagle.rst diff --git a/docs/nodice/eagle.rst b/docs/nodice/eagle.rst new file mode 100644 index 0000000..a1a44c4 --- /dev/null +++ b/docs/nodice/eagle.rst @@ -0,0 +1,39 @@ +============= + Legal Eagle +============= + +So it goes like this. + +Writing down thoughts, playing with rhymes and puzzles. + +Riddles with answers or not. Or riddles which answer themselves? + +So lots here is simply quite wrong. But the answer there will help to +show the way. + +So check for assumptions, nearly right but not always, but maybe its +good enough? + +reminds me it might be wrong... did I mention that? + +its like godel and math, somethings are true with no way to be sure + +some can be true or false it doesn't matter, but no way to know + +and some are true or false and can be proved to be so) + +i think that should cover the legal disclaimer ;) + +wiki pedia might help and a good place to go to check leads and Leeds +too I guess, but don't go there:: + + did i mention the legal disclaimer .. it might not be true there + too, but its proved a good web of trust from wales... + hmm... reminds me of jimmy from aber ga veni. And Malcolm Nash and + Garry Sobers.... + +another fun one... don't forget the legal disclaimer.. + +The tankrain rongo rongo show may really be a thing. + +Round and round and side to side, up and down we go. From 2b7fdf9eac75436f3731678c7123e008f934edb9 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 17 Oct 2017 23:30:10 -0300 Subject: [PATCH 124/642] the eagle has landed.. i think --- docs/nodice/eagle.rst | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/docs/nodice/eagle.rst b/docs/nodice/eagle.rst index a1a44c4..b9c347b 100644 --- a/docs/nodice/eagle.rst +++ b/docs/nodice/eagle.rst @@ -37,3 +37,23 @@ another fun one... don't forget the legal disclaimer.. The tankrain rongo rongo show may really be a thing. Round and round and side to side, up and down we go. + +The license is gpl v 3, or so it says in the root. + +Creative Commons for docs and pics is more than good for me. + +I try to give credits where due, but never enough. + +It's all glued with python, so lots to thank. + +And references everywhere to things I love. + +So if you're in doubt just ask Larry Lessig. + +That's Lessig not Wall of the perl. + +And better be Lawrence @lessig + +Or Pamela Jones in a fine red dress. + +Groking the law for the rest of us. From d99ef0afb69823eb76ba862c5edfb573bb3b42c4 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 18 Oct 2017 02:05:24 -0300 Subject: [PATCH 125/642] stop to rest and words 5 to 7 and 20 to 26 --- docs/nodice/stop.rst | 7 +++++++ karmapi/words.py | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 docs/nodice/stop.rst diff --git a/docs/nodice/stop.rst b/docs/nodice/stop.rst new file mode 100644 index 0000000..9b5d428 --- /dev/null +++ b/docs/nodice/stop.rst @@ -0,0 +1,7 @@ +==================== + Does it ever stop? +==================== + +If you get here, pause at least. + +Sleep of the cure io to pure. diff --git a/karmapi/words.py b/karmapi/words.py index 563ee40..17663d4 100644 --- a/karmapi/words.py +++ b/karmapi/words.py @@ -28,7 +28,7 @@ counts.update(name.open().read().split()) - print(counts.most_common(5)) + print(counts.most_common(7)) print(sum(counts.values())) print() @@ -36,7 +36,7 @@ print('Totals:') -print(totals.most_common(20)) +print(totals.most_common(26)) print(sum(totals.values())) From ee2b23afd5f8d18b7b5058590afd7cfd561c40a7 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 18 Oct 2017 02:09:30 -0300 Subject: [PATCH 126/642] same time same place tomorrow and a bit of a plank --- docs/nodice/satsap.rst | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 docs/nodice/satsap.rst diff --git a/docs/nodice/satsap.rst b/docs/nodice/satsap.rst new file mode 100644 index 0000000..9746a4a --- /dev/null +++ b/docs/nodice/satsap.rst @@ -0,0 +1,15 @@ +====================== + SAme Time SAme Place +====================== + +Same score, + +But not quite the same. + +Many meanings. + +How much information? + +Bits and bytes + +Prior and post. From 1bc4aaa2a2f835424590387ddea9f6c839dd7aac Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 18 Oct 2017 02:29:53 -0300 Subject: [PATCH 127/642] boas, not snakes for a change --- docs/nodice/boas.rst | 31 +++++++++++++++++++++++++++++++ docs/nodice/typo.png | Bin 0 -> 174142 bytes 2 files changed, 31 insertions(+) create mode 100644 docs/nodice/boas.rst create mode 100644 docs/nodice/typo.png diff --git a/docs/nodice/boas.rst b/docs/nodice/boas.rst new file mode 100644 index 0000000..92a6600 --- /dev/null +++ b/docs/nodice/boas.rst @@ -0,0 +1,31 @@ +================== + Not snakes, boas +================== + +Bulletin of atomic scientists. + +The doomsday clock, how long to midnight. + +Add g, where will you put it? + +After the bulletin, but with out a space? + +That's what I did in the help I dont use + +It comes from the doc + +String in the code + +Appears by magic + +from the guido clock + +Sets the time to 5 to the night + +Right now I'm an optimist. + +If the codes as long + +orongo we go + +and type it wrongly. diff --git a/docs/nodice/typo.png b/docs/nodice/typo.png new file mode 100644 index 0000000000000000000000000000000000000000..72e2da4eb693d16e942a9c84d585fa04af819761 GIT binary patch literal 174142 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 literal 0 HcmV?d00001 From 05f702fbcfcf077f42fc2b74b941807a144f0366 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 18 Oct 2017 10:17:35 -0300 Subject: [PATCH 128/642] aspen q3 loss estimate update for filly --- karmapi/filly.py | 1 + 1 file changed, 1 insertion(+) diff --git a/karmapi/filly.py b/karmapi/filly.py index ececfab..bb21187 100644 --- a/karmapi/filly.py +++ b/karmapi/filly.py @@ -350,6 +350,7 @@ def score(self): Report(Orgs['xl'], q3, date(2017, 10, 12), 1.48), Report(Orgs['everest'], q3, date(2017, 10, 12), 1.2), Report(Orgs['arch'], q3, date(2017, 10, 12), 0.345), + Report(Orgs['aspen'], q3, date(2017, 10, 17), 0.360), ] # factor to apply to premium to get reinsurance loss From 87b0b17312b06740bac2fda62337693a309af61f Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 18 Oct 2017 15:25:59 -0300 Subject: [PATCH 129/642] 4 and 20 black birds with doctor dad --- docs/nodice/4and20.rst | 39 +++++++++++++++++++++++++ docs/nodice/drjg.rst | 65 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 docs/nodice/4and20.rst create mode 100644 docs/nodice/drjg.rst diff --git a/docs/nodice/4and20.rst b/docs/nodice/4and20.rst new file mode 100644 index 0000000..bfaff10 --- /dev/null +++ b/docs/nodice/4and20.rst @@ -0,0 +1,39 @@ +=========================================== + Four and Twenty Black Birds Baked in a Pi +=========================================== + +4 and 20, 2 * 3 * 2 ^ 2 + +Once had MG, but now its gone away + +For new year's resolution + +Pledged to drink more beer + +Four years I found I couldn't + +It just made the MG worse. + +Then later I tried + +Herbal remedy + +Eck, in asia for one + +It helps the immune system + +The very same system that aggravates MG + +Up and down in cycles, never know what works + +But 4 and 20 black birds + +Maybe, just maybe? + +MG has gone away + +I'm drinking beer again. + +4 and 20 black birds. + +Baked in a brownie. diff --git a/docs/nodice/drjg.rst b/docs/nodice/drjg.rst new file mode 100644 index 0000000..661e74d --- /dev/null +++ b/docs/nodice/drjg.rst @@ -0,0 +1,65 @@ +============ + Doctor Dad +============ + +What's the question? I guess I am not so sure myself. + +Should sign up for a doctorate, but not the donkey work. + +Unis these days, raising cash or making waves? + +So I might just hang out in the Car el ton bar. + +Talk about ideas, how the universe works. + +That is that this is about + +Maybe a book, but a a book that will be code. + +A rongo-rongo script. + +Undeciphered, though it is just plain text. + +I think I know what it might be. + +And how the Moai moved from the quarry to the shore. + +Why they always face inland, except for a ki vi. + +Giant magnets waddling around. + +Working on a simulation + +that may prove I am right. + +There is a link with ptah from Egypt + +And the theories of Max Planck + +In fact its all related + +Why I think I might be right. + +I am sure it is what is already known + +At least at time before + +But many are down in the weed. + +Not seeing what's above + +But we all see more + +Knowing the waves of G exist + +E and M too, a unified model + +You can explain it all, with speed of light waves. + +Relativity too, special and general. + +And Planck with Poincare + +Godel Escher and Bach + +Filled in the details for all. From d225ede224954239dfad7ad7dd561f23fd2ad625 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 18 Oct 2017 15:28:58 -0300 Subject: [PATCH 130/642] orange football science bulletin optimism --- docs/nodice/boas.rst | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/nodice/boas.rst b/docs/nodice/boas.rst index 92a6600..595f7e2 100644 --- a/docs/nodice/boas.rst +++ b/docs/nodice/boas.rst @@ -22,10 +22,14 @@ from the guido clock Sets the time to 5 to the night -Right now I'm an optimist. +Right now I'm an optimist, twice the boas. If the codes as long orongo we go -and type it wrongly. +and type it in orange football + +hope for a garble or two + +covfefe From db1e3bf07187ea7881c695dbf0accccdc9dd82d4 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 18 Oct 2017 17:05:11 -0300 Subject: [PATCH 131/642] perfect six, garry sobers and malcolm nash --- docs/nodice/six.rst | 31 +++++++++++++++++++++++++++++++ docs/nodice/undertone.png | Bin 0 -> 80727 bytes 2 files changed, 31 insertions(+) create mode 100644 docs/nodice/six.rst create mode 100644 docs/nodice/undertone.png diff --git a/docs/nodice/six.rst b/docs/nodice/six.rst new file mode 100644 index 0000000..954d9d9 --- /dev/null +++ b/docs/nodice/six.rst @@ -0,0 +1,31 @@ +=================== + My Perfect Cousin +=================== + +6 just perfect, but what does that mean? + +1 + 1 + 1 + 1 + 1 + 1 = 1 + 2 + 3 = 1 * 2 * 3 + +I heard a talk, maybe lightning in the sea. + +About taking a text and boiling it down to the essence. + +It was better than that more fun. + +In the end what popped out was just six words. + +So that's about the length of a commit + +Give a take a bit of a plank. + +But its a good place to start + +If it pulls you in + +Don't be afraid + +Some of the deltas are quite small + +It might not be doing what you hoped it would do + +But its software and free, so you can play too. diff --git a/docs/nodice/undertone.png b/docs/nodice/undertone.png new file mode 100644 index 0000000000000000000000000000000000000000..e0d550ca2d5e01ef25afc5a37373dfbee86b0dfb GIT binary patch literal 80727 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 bI5@e%Dql2UIRG=&Lx<#~lqGY;Z$J7!$zMlX literal 0 HcmV?d00001 From d4f7d0d680fe383f716e2b5a36e6c7fe0cc6c0a0 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 18 Oct 2017 17:05:38 -0300 Subject: [PATCH 132/642] sixes and fours, forgot the cricket --- docs/nodice/six.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/nodice/six.rst b/docs/nodice/six.rst index 954d9d9..d83a9d5 100644 --- a/docs/nodice/six.rst +++ b/docs/nodice/six.rst @@ -6,6 +6,10 @@ 1 + 1 + 1 + 1 + 1 + 1 = 1 + 2 + 3 = 1 * 2 * 3 +A cricket match at aber ga glenny. + +Sobers and Nash, six sixes each. + I heard a talk, maybe lightning in the sea. About taking a text and boiling it down to the essence. From 44ac55298afda75b9772cfdcef3e81c9d57a24e0 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 19 Oct 2017 20:01:52 -0300 Subject: [PATCH 133/642] no mission statement --- docs/nodice/mission.rst | 89 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 docs/nodice/mission.rst diff --git a/docs/nodice/mission.rst b/docs/nodice/mission.rst new file mode 100644 index 0000000..df11209 --- /dev/null +++ b/docs/nodice/mission.rst @@ -0,0 +1,89 @@ +===================================== + There and back to see how far it is +===================================== + +On a mission, a mystery tour. + +Where are we going? + +If in doubt, you can always + +Use random dot random + +scale to a plank + +to use as you wish + +or thicker and shorter + +with more or less + +who am i? + +did the breezy badger have it? + +or was that just in bsd? or gmt? + +if in doubt, zero time and use random tot random for free + +from 3 6 3 on artful aardvark + +19 10 20 17 + +Was there in A before? + +I remember a badger 2004? + +something dapper not darl + +edgy not elk but a ee by gum + +feisty i'm failing + +was red then? + +or back to deb and ian? + +G, py 2.2 at least. + +Happy as a pig s 2 4 u. + +Hardy Heron, on the canal + +I an Ibex, what's that? + +Jaunty a jackalope + +but best of all, for me at least + +Karmic Koala 9 out of 10 two eyes and a nose. + +L < M < N and m > n > o > p + +to zesty and back to the artful + +Not the dodger, not dodgy + +The Artful Artvaark + +With Ubuntu built in for free. + +Here today for all. + +PS did I get the day right? Any day after zero with no day zero + +Unless theres a canary + +In the wharf or at or greave. + +Thanks for all the letters + +And don't forget the t-shirts + +Now what's the mission? + +Oh forget about that and lets get on. + +Or wait about and ride what's coming. + +From a to z again. From 5db4f552fd9c197c28b4666c45159ca4be07efe6 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 19 Oct 2017 20:05:12 -0300 Subject: [PATCH 134/642] budge in a jar --- docs/nodice/budgie.png | Bin 0 -> 46970 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/nodice/budgie.png diff --git a/docs/nodice/budgie.png b/docs/nodice/budgie.png new file mode 100644 index 0000000000000000000000000000000000000000..9487ab726cf60e91fb11d2e83d044e548b52a831 GIT binary patch literal 46970 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

d%dm+&IU(82o)E7` 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 a?;kzFk@;%4P}=$6D_w0PtwN1ELH`4{c4MCa literal 0 HcmV?d00001 From 7c26cc448927af91415c2a42dfd9924ccdb66770 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 19 Oct 2017 23:15:29 -0300 Subject: [PATCH 135/642] alphabet soup --- docs/nodice/mission.rst | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/docs/nodice/mission.rst b/docs/nodice/mission.rst index df11209..e4f31b3 100644 --- a/docs/nodice/mission.rst +++ b/docs/nodice/mission.rst @@ -60,6 +60,30 @@ Karmic Koala 9 out of 10 two eyes and a nose. L < M < N and m > n > o > p +Maverick meer cat + +How could you miss that one? + +mm mc mc++ and e = mcc and hockey too eh? + +every letter covered there + +the best teacher of them all + +and there's been a lot of good teachers + +showing examples with code + +pw a bit help and others too + +fab scotty, best of the best. + +and dc s and qed or was it c. + +wd and rm c or s. thank you all. + +for keeping it going for the rest of us. + to zesty and back to the artful Not the dodger, not dodgy From ab6a12347cecc8bf0f6ed2137af6ad0e33e69c76 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 20 Oct 2017 20:26:48 -0300 Subject: [PATCH 136/642] math playing for the team with no name --- docs/nodice/math.rst | 77 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 docs/nodice/math.rst diff --git a/docs/nodice/math.rst b/docs/nodice/math.rst new file mode 100644 index 0000000..ae9be1d --- /dev/null +++ b/docs/nodice/math.rst @@ -0,0 +1,77 @@ +================== + The Maths Debate +================== + +There's foot ball at college. + +Teams with fine names + +There's cecil of the park + +And len with the 8's and unders. + +I never did play for the maths debators. + +A team with no name? + +With sterlo and bob + +And jim in the room + +with a rose on his back + +that he sowed himself + +with a lizzy thread of black + +More he said + +From the abbey in the glen + +Foundation of math + +With zebedee + +H'ed been on the tele + +With catastrophe + +But now he was here + +With lapin a gile + +And offered us 50 per cent + +We could have walked out right + +There changed the denominator + +And got 100 per cent + +But we stayed for the deck chairs + +Cos zebedee was a dog + +A stairway to heaven + +In the wood of L3 + +Mars outside + +Cov for Fay too. + +Oh what a story + +In the holly bush spa + +Den with a goddess + +And world cup poker + +Sterlo, the monkey hanger + +And Bob from north of the river + +I never did play for the maths debators + +What was the team with no name? From d2979d6bdd3d05144a4febdc918045dbd974011b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 20 Oct 2017 20:39:40 -0300 Subject: [PATCH 137/642] incoming from bert who may hold the a --- docs/nodice/incoming.rst | 106 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 docs/nodice/incoming.rst diff --git a/docs/nodice/incoming.rst b/docs/nodice/incoming.rst new file mode 100644 index 0000000..b8fa8d3 --- /dev/null +++ b/docs/nodice/incoming.rst @@ -0,0 +1,106 @@ +========================================= + Just in from Burk who holds the other A +========================================= + +I'll begin at the end with the response:: + + awesome. + + from now on in no dice, if you see ray the burk hold a + + or something like that... it's you, or someone that's very like you + + in some dimension.. + + this is awesome.. thanks with much beer to come.. + + Nov 2nd? now there's an idea 55 - 33, I'll bring some cards. + + We can fix it if its not fixed by then. + + + Johnny wo the gilly, pi times slower may be good for a plank. + + +Now from the bard, copy paste?:: + + + At the other end of the spectrum from this morning's missive + + How many subscribe to scholarly things like 'Communications of the + ACM'? or the 'IEEE Spectrum'? I guess the chemist in the group will + need to fill in the blank with her chosen geek publication. + + I then I took it one step further and sat at a table by myself down + at the club, and read it cover to cover. With a beer or two. + + And something that hasn't happened in a long time, or well, ever, I got + called out as a sterotype: looking like a geek from San Francisco. Well, + that was what the woman, who also had no conversational partner, used to + strike up a conversation. + + Who would have thought, that in the CACM, you see such interesting things + like: + + + "Divination is the practice of occultic ritual as an aid in decision + making", on page 7 no less. Which goes on to say that "... divination truly + allows us to consult the divine, we can view it simply as a form of + randomization, which is recognized as a powerful construct in game theory, + and algorithm design." ... "randomization is a powerful way to deal with + incomplete information" ... "they are simply randomizing in the face of + uncertainty about rain, pests, and more, but this randomization comes with a + belief in the divine source of the decision".... "when the accept/reject + decision pivots on issues such as significance and interestingness, which + can be quite subjective". + + Another article: "Assuring Software Quality by Preventing Neglect".... + which is a 'grayhat' problem when compared to blackhats (hackers who deploy + software as a weapon with malicious intent) and whitehats (setting + safeguards against defective products". With a few interesting conversation + starters being, I think: ".... during maintenance cycles, they do not + correct the old source code comments, seeing such as edits as risky and + presumptuous". ... "it is a failure of degree, a failure to pay enough + attention and take enough trouble" ... which leads to a theory of "ethics + of care which displaces the classical agent centered morality of duty and + justice, endoring patient-centered morality as manifest real-tim in + relationships". + + And, well, l something which probably everyone knows, but has been evolving + through a series of articles in the magazine, is that machine learning + algorithms require training time via "generative adversarial networks", + which means you need to mix in some sneaky garbage to improve the odds of + appropriate machine learning. + + And another, in which I can personally associate: "Multitasking Without + Thrashing". "Human context switching is more complicated than computer + context switching. Whereas the computer context switch replaces a fixed + number of bytesi n a few CPU registers, the human has to recall what was "on + the mind" at the time of the switch, and, if the human was interrupted with + no opportunity to choose a "clean break", the human has to reconstruct lost + short term memory" ... "if you have several important tasks, your brain can + get stuck in a decision process that can take quite a long time to decide -- + a situation known as the choice uncertainty problem". ... "thrashing + happens to human multitaskers when they have too many incomplete tasks. + They fall into mood of 'overwhelm' in which they experience considerable + stress" ..... "context switching is _not_ the cause of thrashing. ... the + cause of thrashing is the failure to give every active task enough space for + its working set"... "when a task's working set is in your workspace, + preotect it from being unloaded as long as the task is active .. analog: + protect working sets of active tasks and do not steal from other tasks". ... + "to exit the thrashing state, you need to reduce demand or increase your + capacity". + + + Ok one more: "what we have instead is a society moving towards prosthetic + brains that can be monitored at all times by the state, without the + inconvenience of having to have everyone check in each day at the police + station". When you read this, were you thinking "this isn't me!"? Well, + this is visible by what we write, where we write, what we read, where we + read, who we interact with, what we interact with, .... + + + -- + This message has been scanned for viruses and + dangerous content by MailScanner, and is + believed to be clean. From 4aa5f5bfaecb60dde73a5924e0f36a87d10d75bc Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 20 Oct 2017 20:47:20 -0300 Subject: [PATCH 138/642] who found pi? --- docs/nodice/who.rst | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 docs/nodice/who.rst diff --git a/docs/nodice/who.rst b/docs/nodice/who.rst new file mode 100644 index 0000000..7f506b3 --- /dev/null +++ b/docs/nodice/who.rst @@ -0,0 +1,25 @@ +======================== + Who found Pi to the e? +======================== + +On a who dunnit or rather who found it + +Or what or who, its he, pi ri. + +Four and eighty after bouncing around in some unit of plank. + +Of course it was snow + +who found pi ree. + +He found him and loved him + +So brought it to us + +And now we have found him + +We cannot un know + +The love in snowy + +That brought us pi by you and by pie to the e to the i. From d3cae5377b70661ae30eab89c2e833bed5d99937 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 20 Oct 2017 21:31:03 -0300 Subject: [PATCH 139/642] from hip to the queen ... a tragic tale still whirling round --- docs/nodice/hip.rst | 105 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 docs/nodice/hip.rst diff --git a/docs/nodice/hip.rst b/docs/nodice/hip.rst new file mode 100644 index 0000000..bc0493e --- /dev/null +++ b/docs/nodice/hip.rst @@ -0,0 +1,105 @@ +===================== + From Downy to Queen +===================== + +We lost Downy + +Just a while ago + +201x at the nac no nra + +Asked me to sing + +But i didn't know the words + +It didn't matter, they came to me + +Moment of magic with er of the eye + +Now downys gone, but it carries on + +Day 1 of the artist aardvaark + +A hip replacement of sorts. + +Yellow and red, on the outside + +Between six and seven + +For the hip + +Re place + +mental + +centre + +cape robin + +connie 53 or er 33 + +6.5 from cape breton + +denim + +and a red and white rose + +with green there too + +from the abbey in the glen + +with malcolm nash + +and sober as gary + +not wilson, of 17 and 23 or 66 and 67? + +In the ford with the brad? + +With zip 2.3 + +it had to be signed + +the prisoner in the center + +to the east of the castle + +with the pool and the light in the sun + +where the answer is blowin in the wind + +again, and again and again.. but never quite right.. + +or too wrong and too loud when more wrong and less loud might be good. + +The answer came but what did it mean? + +Off with a question, had to trade the good bit for + +a receipt to be signed for for the one + +in the chains at the castle + +yes that's it + +the queen from scot land + +it the castle in sheffield + +with the market that's now at the foot + +of the moor, + +which now's a good walk + +from the moors over the + +tunnel that goes + +with a grin and a ford + +to the dale of e + +and the start of the py by e to the 9 + +check the log of the captain of the bog. From 26b44e4a39dea01c9b9aa2dd2dd6b679d136cfbb Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 20 Oct 2017 21:57:31 -0300 Subject: [PATCH 140/642] the zen of the zbdee db --- docs/nodice/this.rst | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 docs/nodice/this.rst diff --git a/docs/nodice/this.rst b/docs/nodice/this.rst new file mode 100644 index 0000000..19c23b6 --- /dev/null +++ b/docs/nodice/this.rst @@ -0,0 +1,25 @@ +======================== + Turning self into this +======================== + +Or pickles without a jar + +In an oz db + +From the wizard tp + +Whatever the list + +you always need tp, just add m and mm and mmm + +so:: + + import this + +and read the zen of tp + +thanks for the zodb + +the zeberdee db that springs every night + +As the clock of the cron chimes out From ed989b36dbd16c5c533d09a15eaf416d3c3d321b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 20 Oct 2017 23:53:00 -0300 Subject: [PATCH 141/642] fortitude --- docs/nodice/a1.png | Bin 0 -> 32499 bytes docs/nodice/answer.rst | 15 +++++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 docs/nodice/a1.png create mode 100644 docs/nodice/answer.rst diff --git a/docs/nodice/a1.png b/docs/nodice/a1.png new file mode 100644 index 0000000000000000000000000000000000000000..cdcc1c48f33cdf6291e5111aa830ec02d121a2c1 GIT binary patch literal 32499 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 Date: Sun, 22 Oct 2017 00:28:22 -0300 Subject: [PATCH 142/642] t time e bi gum --- docs/nodice/ebigum.rst | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 docs/nodice/ebigum.rst diff --git a/docs/nodice/ebigum.rst b/docs/nodice/ebigum.rst new file mode 100644 index 0000000..f64c164 --- /dev/null +++ b/docs/nodice/ebigum.rst @@ -0,0 +1,8 @@ +======== + E by G +======== + +tea at 10 30 + +til 10 45 + From 9ace692109b2583413845809c036e4510f0d991b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 22 Oct 2017 00:30:23 -0300 Subject: [PATCH 143/642] mulligan and me take a 4 sum --- docs/nodice/golf.rst | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 docs/nodice/golf.rst diff --git a/docs/nodice/golf.rst b/docs/nodice/golf.rst new file mode 100644 index 0000000..84c34f6 --- /dev/null +++ b/docs/nodice/golf.rst @@ -0,0 +1,39 @@ +================= + Mulligan and me +================= + +Takes a four some + +2 and 2 + +you choose how + +1st T + +Take a shot + +Pick the best + +Go by the rest and pick them up + +We are all mulligans + +pick them up but note the distance. + +Go to the best and add the distance. + +Draw two circles around the hole + +Now where do you want to play? + +Hit it there rinse and repeat + +And move on to the next. + +Stop at 19. + +Look back at mulligan and me. + +And thanks for it all + +Now how doe it work? From f1adc24afbbd3b41688532d5ca179b069ac31ff2 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 22 Oct 2017 01:26:25 -0300 Subject: [PATCH 144/642] alphabet soup --- docs/nodice/golf.rst | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/docs/nodice/golf.rst b/docs/nodice/golf.rst index 84c34f6..1a97c83 100644 --- a/docs/nodice/golf.rst +++ b/docs/nodice/golf.rst @@ -37,3 +37,35 @@ Look back at mulligan and me. And thanks for it all Now how doe it work? + +who worked on ven on + +a cater pillar tree? + +I hope its d and cs + +with that sack that kills + +the house is magic + +thats good for me. + +don't forget qed + +with feet on the desk + +and sj squared + +with mj too + +and ps and sp + +but best of all + +je with a vista + +a real prog + +a bill a tty + + From 3024a6f145f5a1fff3c9874bc475eb552dccf262 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 22 Oct 2017 16:33:04 -0300 Subject: [PATCH 145/642] no van much thanks the end... --- docs/nodice/novan.rst | 201 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 docs/nodice/novan.rst diff --git a/docs/nodice/novan.rst b/docs/nodice/novan.rst new file mode 100644 index 0000000..75f042f --- /dev/null +++ b/docs/nodice/novan.rst @@ -0,0 +1,201 @@ +================ + No Van No Rest +================ + +I'm coming the the van eh? + +But not with a van + +An advance party + +Checking it out + +With a guitar + +And a cat carrier too + +Full of magic + +From Pi Ree and Snow + +Coming to the snow in the north + +From bmd to Ron in toe + +Then up the 4 + +17 to a belle + +ville + +Through cumber land and geordie too + +Wit there by to see. + +Through Darl McLied + +In Darling Tonne + +And a vale + +Pick a ring + +Up through tweed + +3 and 8 or 3 times 8, what's that about? + +Then onto the 7 + +To scotland for a p in p + +No tape to c, but maybe there is? + +Always with mj to guide + +and gm too, and bmg, they're a quantum pair + +With ds and hs too, another quantum pair. + +Meet with dr and er and the ee, eh aaaah hell + +not hell but heaven with l + +To a van with a dell and + +a deck of cards + +with fine five dice + +with ron and go + +and go and run + +and a scot at bank on bank + +with k and gm to guide + +273 4 297 + +I need a new phone, now there's a + +a 613 number to juggle + +can someone write the code? + +no pull required + +just go have fun + +fork is the way to go. + +Here's an advance wave + +returning via king edward + +for g and i + +in toe ron too + +always with mmmmmm to guide + +Next wave coming soon + +just check the cat forecast + +when's the snow coming? + +to a place that has no van? + +spring m from the castle + +east of a shire in devon + +trojan horses of love + +disguised as russian dolls + +a pass the parcel show + +i hope she sees it + +because she wrote the script + +or rather gmd and bmg did + +with ds and hs as the + +data and mg + +providers + +of die a grams of venn + +of arrows + +but where is galois? + +no worry just + +give him a thing that resists + +and a tiny battery + +to store what's there + +what's that whining? + +a coil perhaos? + +crystal set + +and a line to the cherry tree + +caroline + +at 2am + +tiger feet + +i liked it + +ab + +and ba + +dancing q + +but who could forget, what a loo? + +dancing down the staird + +an artful aarvark + +with so many ehs a? + +I wish I could spell it + +Forgot the d. + +Only one D? + +but there's a b and d + +was there a c? + +surely there was must ask er. + +with love its jar + +remove the g + +it makes it pi times slower + +but going there slower + +and riding the waves + +gets you there faster + +in the end + +the end... From be01fff2a1799cb352d31232f1c5edcbcdf1a2fc Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 22 Oct 2017 16:48:15 -0300 Subject: [PATCH 146/642] hitch in the plan pi ri can help --- docs/nodice/novan.rst | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/docs/nodice/novan.rst b/docs/nodice/novan.rst index 75f042f..765f4ee 100644 --- a/docs/nodice/novan.rst +++ b/docs/nodice/novan.rst @@ -199,3 +199,41 @@ gets you there faster in the end the end... + +a hitch in the plan its sold but its a house + +but not just any house i think + +I remember 19, a survey then + +a bottle of red and white + +on the doorstep + +this time its 5 * 11.11111111111 to the e to the pi + +ee by gum + +add that to 497 and lets see what happens + +bmd to yo its me no van + +if this is not right + +theres a fork to the left and a swerve + +and its just as good, just a little + +bit different + +so we'll see what the survey + +says its a future on friday + +its all relative + +with love from bda + +jl here too pi and s. + +mmmmmmmm From 991ab2d6ae141b80e3dbdd80b08bd7ce5e723377 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 22 Oct 2017 18:55:00 -0300 Subject: [PATCH 147/642] p for a prime --- docs/nodice/novan.rst | 48 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/docs/nodice/novan.rst b/docs/nodice/novan.rst index 765f4ee..a43e008 100644 --- a/docs/nodice/novan.rst +++ b/docs/nodice/novan.rst @@ -237,3 +237,51 @@ with love from bda jl here too pi and s. mmmmmmmm + +left a book in a box + +with paper + +in a room + +4 by 7 + +geb, the infinite slalom + +an ace from del + +quite the boy + +and an ace girl too + +oft and qm + +some of it stays for now + +but books coming back + +and pie with hats + +sense the n vi row + +or the as tor hat + +but the books to bda + +for an infinite slalom + +with a messages added + +in the passage of time + +round and round and round + +and two aces two + +for two aces here + +eh eh? + +aa 2 eh * aa - g + +with 0 / p for a prime From 4165ccb96b4d6574acea6528a75b93faec896220 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 22 Oct 2017 18:58:13 -0300 Subject: [PATCH 148/642] k1 --- docs/nodice/novan.rst | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/nodice/novan.rst b/docs/nodice/novan.rst index a43e008..213bd2c 100644 --- a/docs/nodice/novan.rst +++ b/docs/nodice/novan.rst @@ -285,3 +285,17 @@ eh eh? aa 2 eh * aa - g with 0 / p for a prime + +oh k 1, working on with l 7 + +around 12 27 + +27 there's a 10 + +to await with async nap time + +ran dom dot dom ran do pi 2 ^ n + +like bonos but better much thanks to the k 1 + +the original artful aardvark with love. From 566497af1b238eeac75fc3b6d6271fd695ebb0ad Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 22 Oct 2017 19:25:59 -0300 Subject: [PATCH 149/642] eh to the n to the zee bd --- docs/nodice/akv.rst | 89 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 docs/nodice/akv.rst diff --git a/docs/nodice/akv.rst b/docs/nodice/akv.rst new file mode 100644 index 0000000..9526bfb --- /dev/null +++ b/docs/nodice/akv.rst @@ -0,0 +1,89 @@ +================================= + Akl Akira A k i v g w s m m ... +================================= + +First there was Akela + +Tot things up and tie a knot + +At 7 * 5 * 3 + +The price of a flower + +At a garden on a hill + +Tended by k one + +and brought to us + +with a dibber + +and trays + +and turned into flower + +at 2 ^ 13 + +then skip + +with a door of gold + +pj the one that fixes the pipes + +with balls and strings + +and planks of course + +and always the size of all + +three legs of a man + +a mission to who knows where + +over dale and glen + +with packs and rations + +to a dug in old lass town + +A train there's a train + +to a galaxy wheel + +for now lets sleep, its cold + +with stars at the station + +where the moai rest for a while + +many more akn + +zeb err dee of course + +and the lathe with the weight + +that flew through the sky + +as k looked on in wonder + +with j enthralled + +a mag and lev train? + +All umin? ummmm? or just m 2 the n?????? + +along the way a kira came + +I loved what was said + +by him and all that is good + +may take some moons. + +i wrote a letter + +no post or code + +so no say thanks + +to a k n to the zee 4 eh?????? <3 <3 <3 From 02608b9b26e1c17b80bfb2167c2617ea794bf920 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 22 Oct 2017 19:30:36 -0300 Subject: [PATCH 150/642] re boots for mission --- docs/nodice/akv.rst | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/docs/nodice/akv.rst b/docs/nodice/akv.rst index 9526bfb..02afc2b 100644 --- a/docs/nodice/akv.rst +++ b/docs/nodice/akv.rst @@ -87,3 +87,48 @@ no post or code so no say thanks to a k n to the zee 4 eh?????? <3 <3 <3 + +back to the mission + +and on to the galaxy wheel + +back on a boat + +with skip + +the pirates and all the maps + +and knots and fires + +bill with the water + +wood and ask a question + +tents of course + +later came back as akela + +some chess with lavender + +all good then + +at 2 * 7 * 5 + +in a glen with port + +and a line of sight + +to a cave through a mountain + +to a grin with a ford + +up a brooks + +to the frog + +and on to the fort + +wait for a while + +to re boot + From 00b96219feb6019db02e176f1f1da86b2b2bf19b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 23 Oct 2017 17:30:00 -0300 Subject: [PATCH 151/642] princess cricket and eh eh for ev er --- docs/nodice/spr.rst | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 docs/nodice/spr.rst diff --git a/docs/nodice/spr.rst b/docs/nodice/spr.rst new file mode 100644 index 0000000..942eedc --- /dev/null +++ b/docs/nodice/spr.rst @@ -0,0 +1,17 @@ +=========== + s and p r +=========== + +News just in snowy and piri back after an afternoon in the sun. + +Love to Princess Crickets wherever you may be. + +btw what time is it? Losing track... + +wind picking up heading north-west + +chariot to goose station + +then no van to no home, but a bonfire? + +Ubuntu aa day n From c3f5683e00e8d4b381e3455fba6feffa2c140085 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 23 Oct 2017 17:33:56 -0300 Subject: [PATCH 152/642] weather upgrades???? radar fixed. or was that pi ri? --- docs/nodice/weather.rst | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 docs/nodice/weather.rst diff --git a/docs/nodice/weather.rst b/docs/nodice/weather.rst new file mode 100644 index 0000000..304e2be --- /dev/null +++ b/docs/nodice/weather.rst @@ -0,0 +1,3 @@ +btw nice updates to the weather service. + +des per i do xxx From d9fd7709386ee1dc1647569ca3e0e7f07859bfe4 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 23 Oct 2017 17:41:41 -0300 Subject: [PATCH 153/642] rabbits sighted? --- docs/nodice/mg.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/nodice/mg.rst b/docs/nodice/mg.rst index 419e40d..939c2db 100644 --- a/docs/nodice/mg.rst +++ b/docs/nodice/mg.rst @@ -195,3 +195,7 @@ How can you use it? Open or secret? There's not much in between. + +Update on rabbits: lots of garbles, low signal, + +gut rabbits every whwere From 8a3ac7316d9496418c6aedeadb265a23d88d50e5 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 26 Oct 2017 05:39:32 -0300 Subject: [PATCH 154/642] budge in a jar new jpg --- docs/nodice/budgie.jpg | Bin 0 -> 746919 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 docs/nodice/budgie.jpg diff --git a/docs/nodice/budgie.jpg b/docs/nodice/budgie.jpg new file mode 100755 index 0000000000000000000000000000000000000000..841ac4e9dad569834acc03d9e956316a721a79c5 GIT binary patch literal 746919 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

|1N_}_>gA=|X`)s?9aWy>zOno#0CX_U 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

8l_4fRV5AwKclI?aRaKuO%S87}K0LT)l}Z9| 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 Date: Thu, 26 Oct 2017 05:49:56 -0300 Subject: [PATCH 155/642] who killed jfk? Tune in tomorrow --- docs/nodice/aad6ddm1.rst | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 docs/nodice/aad6ddm1.rst diff --git a/docs/nodice/aad6ddm1.rst b/docs/nodice/aad6ddm1.rst new file mode 100644 index 0000000..af7cfe7 --- /dev/null +++ b/docs/nodice/aad6ddm1.rst @@ -0,0 +1,39 @@ +================= + Who Killed JFK? +================= + +Its DD-n, eh eh Day 6? + +Its 4 in the morning, somewhere. + +Will Donny open the box? + +Or take the money? + +If I know Donny its both. + +A D Day in Dallas + +Was the Tall Bot write + +When he wrote about chess + +And teh plot of the Dull + +Less for the see, eye + +And eh? + +And teh oil and steel + +And teh team of stirrers too + +With generals of course + +Upset by the bay + +Where the pigs went awry + +Or was it the dad of Tom Cruise? + +covfefe From 90024fae049d8d5a25ea04608137321b1fac209d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 26 Oct 2017 09:16:20 -0300 Subject: [PATCH 156/642] long term love and support --- docs/nodice/bb2bb.rst | 73 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 docs/nodice/bb2bb.rst diff --git a/docs/nodice/bb2bb.rst b/docs/nodice/bb2bb.rst new file mode 100644 index 0000000..ea7594e --- /dev/null +++ b/docs/nodice/bb2bb.rst @@ -0,0 +1,73 @@ +=================== + Long term support +=================== + +More research on the names of u from yore. + +So it started with a warts and hog. + +Another hog, with hedge that with a whore. + +Things get going with a badger and a breez. + +Lts with the drake of the dapper. + +A fawn and a feisty one + +and a gibbon with guts + +HH another lts + +Intrepid, but what's an ibex? + +Jaunty like jackie + +A karmic koala + +And more LTS love with the lynx that is lucid + +MM of course + +and something hanging in a mall down town O + +Natty too, a narwhal + +Oss a lot, one eric + +More love for the long haul + +Not a penguin though + +But something precise + +Quanta but what is a Kwet salt? + +Raring to go with a ring for a tail + +And sauce too, for gerry to mander + +Something to trust, tar of course, but is it tz? + +TZ it is, another llllllllllong one + +Utopia next, with a single corn + +Vivid not velvet + +And wily note a weary wolf. + +More xx lts love + +and talking away y o y + +zest with a zap, that's us + +Now eh eh? art and hard work, but lots of fun + +Ready for Long Term Support + +You'll love what B is. + +A beaver that is bionic of course. + +Will she be mine, with Long Term Love and Support? From 9a4bf14983970549021848d2c2d9d412ee9987b4 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 26 Oct 2017 09:18:08 -0300 Subject: [PATCH 157/642] green lights blue water, no bottles for you --- docs/nodice/bb2bb.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/nodice/bb2bb.rst b/docs/nodice/bb2bb.rst index ea7594e..55de091 100644 --- a/docs/nodice/bb2bb.rst +++ b/docs/nodice/bb2bb.rst @@ -71,3 +71,13 @@ You'll love what B is. A beaver that is bionic of course. Will she be mine, with Long Term Love and Support? + +PS assuming lights are all green? + +But watching for orange and red. + +small craft warning might be lifting. + +But first a blue and white delight to behold. + +Water too... now where did I leave the bottles? From e1cd67230c86d943d038742f284a3b9bf38afb5f Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 27 Oct 2017 10:20:56 -0300 Subject: [PATCH 158/642] eternal love for m --- karmapi/epigume.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 karmapi/epigume.py diff --git a/karmapi/epigume.py b/karmapi/epigume.py new file mode 100644 index 0000000..f2c11a1 --- /dev/null +++ b/karmapi/epigume.py @@ -0,0 +1,19 @@ +from math import e, pi +from time import sleep +from random import randint + +h = me = 1 +n = 0 +while True: + n += 1 + print(h, me, abs(h-me) / n) + + h, me = me, h + + h *= pi + + me *= e + + sleep(randint(0, n)) + + From 533d34f64f9613fdd10de563f76aee2874b0a346 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 27 Oct 2017 11:17:48 -0300 Subject: [PATCH 159/642] recipe for love and live, all thanks to N and M gold doors --- karmapi/epigume.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/karmapi/epigume.py b/karmapi/epigume.py index f2c11a1..bddf7dd 100644 --- a/karmapi/epigume.py +++ b/karmapi/epigume.py @@ -1,3 +1,5 @@ +""" Recipe for love and life in harmony """ + from math import e, pi from time import sleep from random import randint From bc57d8e071e0c8459c82132f0a0ac150ec1ede52 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 27 Oct 2017 14:27:55 -0300 Subject: [PATCH 160/642] add en to e bi gum --- karmapi/epigume.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karmapi/epigume.py b/karmapi/epigume.py index bddf7dd..52febd6 100644 --- a/karmapi/epigume.py +++ b/karmapi/epigume.py @@ -8,7 +8,7 @@ n = 0 while True: n += 1 - print(h, me, abs(h-me) / n) + print(n, h, me, abs(h-me) / n) h, me = me, h From a842f0cced6a9cab061ca7c5f7de83193fb9e99f Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 30 Oct 2017 10:26:08 -0300 Subject: [PATCH 161/642] m time at last --- docs/nodice/mtw.png | Bin 0 -> 58607 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/nodice/mtw.png diff --git a/docs/nodice/mtw.png b/docs/nodice/mtw.png new file mode 100644 index 0000000000000000000000000000000000000000..f93db66ce1fc3b4313a4297812816b9189091f1e GIT binary patch literal 58607 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 literal 0 HcmV?d00001 From df04ff1c049c5abec597448a552df86aa549d61d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 31 Oct 2017 04:26:50 -0300 Subject: [PATCH 162/642] m+1 to the en is qm --- docs/nodice/pmbggp.rst | 63 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 docs/nodice/pmbggp.rst diff --git a/docs/nodice/pmbggp.rst b/docs/nodice/pmbggp.rst new file mode 100644 index 0000000..62f7701 --- /dev/null +++ b/docs/nodice/pmbggp.rst @@ -0,0 +1,63 @@ +================= + M + 1 to the en +================= + +Its 3 am + +on m + 1 + +All en u c + +At the ren + +re road + +with the door of gold + +PM at the dock + +And the gates + +not bill but R + +And who's this singing? + +It's George + +The Papa + +with the dope + +on the dopes. + +Removing the G + +its over to you + +M + 1 to the EN + +That's you of course + +My own QM + +Coming with a letter + +from a to z + +At the field of kind + +A lee by the sea + +I'll be there at 5 or maybe 6 + +Will you be my qm? + +We're removing the g + +and the i and the l + +So its over to you + +Not a moment too soon + +M+1 to the N, qm. From 3156353e0016b9881c1362e65a3622ef53ae6a85 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 3 Nov 2017 00:06:40 -0300 Subject: [PATCH 163/642] one plus a git tanking --- karmapi/hju.py | 298 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 298 insertions(+) create mode 100644 karmapi/hju.py diff --git a/karmapi/hju.py b/karmapi/hju.py new file mode 100644 index 0000000..9fca163 --- /dev/null +++ b/karmapi/hju.py @@ -0,0 +1,298 @@ +""" I + git + +tank rain for git browsing + +""" + +import itertools +import argparse + +import datetime +utcnow = datetime.datetime.utcnow + +import requests +from pathlib import Path + +from collections import defaultdict + +import curio + +from karmapi import show, base + +from karmapi import pigfarm, checksum + +# Paths to data +url = '.' + +target = None + + +class TankRain(pigfarm.MagicCarpet): + """ Widget to show tankrain images """ + + def __init__(self, parent, path=None, version='local', date=None, *args): + + self.version = version + self.path = path or '~/karmapi/tankrain' + self.timewarp = 0 + self.date = date + if self.date is None: + self.date = utcnow() + + self.load_images() + + super().__init__(parent, axes=[111]) + + self.add_event_map('r', self.reverse) + self.add_event_map(' ', self.next_view) + + self.add_event_map('b', self.previous_day) + self.add_event_map('v', self.next_day) + + def load_images(self): + + self.paths = [x for x in self.get_images()] + self.ix = 0 + self.inc = 1 + + def compute_data(self): + + from PIL import Image + + ix = self.ix + + if ix < len(self.paths): + im = Image.open(self.paths[ix]) + else: + # FIXME -- create an image that shows there is no data + # for now, lets just show a rainbow + rainbow = [x for x in range(100)] + im = [rainbow] * 100 + + ix = ix + self.inc + if ix == len(self.paths): + ix = 0 + if ix < 0: + ix = len(self.paths) - 1 + + self.ix = ix + + self.data = im + + def get_images(self): + + # FIXME -- create key bindings to select time + date = self.date + datetime.timedelta(seconds=self.timewarp) + path = Path(f'{self.path}/{date.year}/{date.month}/{date.day}/').expanduser() + + print(f'loading images for path: {path} v{self.version}v') + + jpegs = path.glob('{}*.[jp][np]g'.format(self.version)) + gifs = path.glob('{}*.gif'.format(self.version)) + + for image in sorted(itertools.chain(jpegs, gifs)): + + if image.stat().st_size == 0: + continue + print(image) + yield image + + + async def next_view(self): + + switch = dict( + wide='local', + local='parish', + parish='wide') + + # no versions, don't switch + switch[''] = '' + + self.version = switch[self.version] + + self.load_images() + + async def previous_day(self): + + self.timewarp -= 24 * 3600 + + self.load_images() + + async def next_day(self): + + self.timewarp += 24 * 3600 + self.load_images() + + async def reverse(self): + + self.inc *= -1 + + async def start(self): + """ FIXME: get yoser to run fetch """ + #farm.yosser.run(fetch, minutes=20, sleep=300) + pass + + async def run(self): + + # use yosser? + await pigfarm.aside(runfetch) + + self.dark() + while True: + + #title = self.paths[self.ix] + if self.paths: + title = self.paths[self.ix] + else: + title = f'{self.ix} : {len(self.paths)} {self.path}' + + self.compute_data() + self.axes.clear() + print('TITLE:', title) + try: + self.axes.set_title(title) + self.axes.imshow(self.data) + except OSError: + print('dodgy image:', self.paths[self.ix]) + + + self.draw() + + await curio.sleep(self.sleep) + + + +async def fetch_part(name, data, minutes=30, timewarp=None, bad=None): + + timewarp = datetime.timedelta() + + #FIXME adjust for timewarp + bad = bad or set() + + timestamp = utcnow() + + timestamp += timewarp + + aminute = datetime.timedelta(minutes=1) + + # make timestamp an even minute + # if timestamp.minute % 2: + # timestamp -= aminute + + end = timestamp - (minutes * aminute) + checks = set() + + while timestamp > end: + timestamp -= aminute + + path = Path(target.format( + date=timestamp, + suffix='.png', + name=name)) + + path = Path('~/karmapi').expanduser() / path + + if path.exists(): + print('already got', timestamp, name) + continue + + if str(path) in bad: + print('skipping bad', timestamp, name) + continue + + # FIXME get a timewarp from the target. Parish is on GMT + #if parish: + # timewarp += parish_timewarp + + print('looking for', timestamp, name) + # need to fetch it + iurl = data['url'].format( + date=timestamp, + size=data['size']) + + + # fixme -- await an async http call + image = requests.get(iurl) + + if image.status_code == requests.codes.ALL_OK: + # Save the imabe + # checksum the data + check = hash(image.content) + if check in checks: + print('dupe', timestamp, name) + else: + print('GOT', timestamp, name) + path.parent.mkdir(exist_ok=True, parents=True) + path.open('wb').write(image.content) + else: + bad.add(str(path)) + print('bad', path, len(bad)) + + + print() + +async def runfetch(): + + await fetch() + + +async def fetch(minutes=30, sleep=300): + """ Download images """ + iurls = dict( + local = dict(url=url + radar_template, + size=100), + wide = dict(url=url + radar_template, + size=250), + parish = dict(url=url + parish_template, + size=0), + ) + + + while True: + bad = set() + for name, data in iurls.items(): + + await fetch_part(name, data, minutes, bad) + + # FIXME -- shrink bad from time to time + + await curio.sleep(300) + + +def main(args=None): + """ Retrieve images currently available + + There are usually six images available from the last half hour. + """ + + parser = argparse.ArgumentParser() + + parser.add_argument('--pig', action='store_false', default=True) + parser.add_argument('--minutes', type=int, default=30) + parser.add_argument('path', nargs='?', default='~/karmapi/tankrain') + parser.add_argument('--version', default='') + parser.add_argument('--date') + + args = parser.parse_args() + + args.date = base.parse_date(args.date) + + if args.pig: + farm = pigfarm.PigFarm() + farm.add( + TankRain, + dict(path=args.path, version=args.version, date=args.date)) + + from karmapi.mclock2 import GuidoClock + farm.add(GuidoClock) + + pigfarm.run(farm) + sys.exit() + else: + curio.run(fetch(args.minutes)) + +if __name__ == '__main__': + # Radar + + main() + From 467f042b8fbfcf2fe4d2b51fc3560d98b13e3c5c Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 10 Nov 2017 12:29:45 -0400 Subject: [PATCH 164/642] doc string for rongo rongo tankrain callback --- karmapi/tankrain.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index e38dee2..5d5e872 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -126,7 +126,7 @@ async def next_day(self): self.load_images() async def reverse(self): - + """ Rongo Rongo change direction """ self.inc *= -1 async def start(self): From ec4e4040e8d3f235067d0e3749cc75b7b545b438 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 11 Nov 2017 06:54:22 -0400 Subject: [PATCH 165/642] tankrain doc strings for time warp asyncs --- karmapi/tankrain.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index 5d5e872..8789536 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -115,13 +115,13 @@ async def next_view(self): self.load_images() async def previous_day(self): - + """ previous day """ self.timewarp -= 24 * 3600 self.load_images() async def next_day(self): - + """ next day """ self.timewarp += 24 * 3600 self.load_images() From 6d78fc5671d5d6e45d40936e86d50faba0b0b03f Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 13 Nov 2017 13:31:54 -0400 Subject: [PATCH 166/642] another pandas moving stuff fix --- karmapi/pigfarm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karmapi/pigfarm.py b/karmapi/pigfarm.py index e02a633..240bc03 100644 --- a/karmapi/pigfarm.py +++ b/karmapi/pigfarm.py @@ -507,7 +507,7 @@ def frame_to_stats(self, frame): stats = frame.describe() - ef = pandas.formats.format.EngFormatter(1, True) + ef = pandas.io.formats.format.EngFormatter(1, True) cells = [] From 36ac4c191901b3a6713b1859a9e73efcd70a11ef Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 21 Nov 2017 15:55:15 -0400 Subject: [PATCH 167/642] add example for veyes crontab to take pic every 10 minutes --- crontab/veyes | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/crontab/veyes b/crontab/veyes index 8bf6133..d0c6290 100755 --- a/crontab/veyes +++ b/crontab/veyes @@ -1,3 +1,7 @@ #@reboot pi /usr/local/bin/python3.6 -m karmapi.veyes /home/pi/karmapi/camera +# default -- one picture per minute @reboot pi /usr/local/bin/python3.6 -m karmapi.veyes /home/pi/karmapi/camera + +# one picture every 10 minutes +# @reboot pi /usr/local/bin/python3.6 -m karmapi.veyes /home/pi/karmapi/camera --sleep 600 From 3fde04fba657fb885d968061a25b31631f330849 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 21 Nov 2017 15:55:58 -0400 Subject: [PATCH 168/642] add some hints on using karmapi with pi --- docs/help.rst | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 docs/help.rst diff --git a/docs/help.rst b/docs/help.rst new file mode 100644 index 0000000..5c17543 --- /dev/null +++ b/docs/help.rst @@ -0,0 +1,59 @@ +====== + Help +====== + +tankrain +======== + +Browse photos in yyyy/mm/dd folders. + +Today:: + + tankrain karmapi/camera + + +yyyy/mm/dd:: + + tankrain karmapi/camera --date yyyy/mm/dd + + +Current folder (assuming has yyyy/mm/dd structure):: + + + tankrain . + + +blume +===== + +View csv files:: + + + blume karmapi/sensehat/2017/11/20 + + +Make a gif from a bunch of images +================================= + +To convert a bunch of image files to a gif: + + + convert image.jpg image2.jpg image.gif + + +Copying files from another machine +================================== + +rsync is a magic program to sync files. + +For example:: + + rsync -va pi@pipost:karmapi/camera/ karmapi/camera/ + + +Cron tasks on the pi +==================== + +Look in /etc/cron.d + +Entry for taking pictures is /etc/cron.d/veyes From 627e9eabd231d96638107a5af14f0d12fe5696d3 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 21 Nov 2017 20:22:35 +0000 Subject: [PATCH 169/642] add --sleep to veyes crontab -- adjust as needed --- crontab/veyes | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/crontab/veyes b/crontab/veyes index d0c6290..bb60dd2 100755 --- a/crontab/veyes +++ b/crontab/veyes @@ -1,7 +1,5 @@ #@reboot pi /usr/local/bin/python3.6 -m karmapi.veyes /home/pi/karmapi/camera # default -- one picture per minute -@reboot pi /usr/local/bin/python3.6 -m karmapi.veyes /home/pi/karmapi/camera +@reboot pi /usr/local/bin/python3.6 -m karmapi.veyes /home/pi/karmapi/camera --sleep 60 -# one picture every 10 minutes -# @reboot pi /usr/local/bin/python3.6 -m karmapi.veyes /home/pi/karmapi/camera --sleep 600 From dc765ddadbada08c72f5fc8e4572ed89152d01bc Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 21 Nov 2017 17:06:15 -0400 Subject: [PATCH 170/642] tankrain options to skip images --- karmapi/tankrain.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index 8789536..e569090 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -51,6 +51,9 @@ def __init__(self, parent, path=None, version='local', date=None, *args): self.add_event_map('b', self.previous_day) self.add_event_map('v', self.next_day) + self.add_event_map('l', self.fewer_images) + self.add_event_map('m', self.more_images) + def load_images(self): self.paths = [x for x in self.get_images()] @@ -72,7 +75,7 @@ def compute_data(self): im = [rainbow] * 100 ix = ix + self.inc - if ix == len(self.paths): + if ix >= len(self.paths): ix = 0 if ix < 0: ix = len(self.paths) - 1 @@ -129,6 +132,15 @@ async def reverse(self): """ Rongo Rongo change direction """ self.inc *= -1 + async def fewer_images(self): + """ Skip some images """ + self.inc = int(self.inc * 2) + + async def more_images(self): + """ Show more images """ + if abs(self.inc) > 1: + self.inc = int(self.inc / 2) + async def start(self): """ FIXME: get yoser to run fetch """ #farm.yosser.run(fetch, minutes=20, sleep=300) From 6cdf7617c514c68ce5040b168b262f5d8ff90c47 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 22 Nov 2017 13:08:32 -0400 Subject: [PATCH 171/642] space now pauses tankrain --- karmapi/tankrain.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index e569090..0ecec3f 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -35,6 +35,7 @@ class TankRain(pigfarm.MagicCarpet): def __init__(self, parent, path=None, version='local', date=None, *args): self.version = version + self.paused = False self.path = path or '~/karmapi/tankrain' self.timewarp = 0 self.date = date @@ -46,7 +47,7 @@ def __init__(self, parent, path=None, version='local', date=None, *args): super().__init__(parent, axes=[111]) self.add_event_map('r', self.reverse) - self.add_event_map(' ', self.next_view) + self.add_event_map(' ', self.pause) self.add_event_map('b', self.previous_day) self.add_event_map('v', self.next_day) @@ -132,6 +133,10 @@ async def reverse(self): """ Rongo Rongo change direction """ self.inc *= -1 + async def pause(self): + """ pause the show """ + self.paused = not self.paused + async def fewer_images(self): """ Skip some images """ self.inc = int(self.inc * 2) @@ -153,6 +158,9 @@ async def run(self): self.dark() while True: + if self.paused: + await curio.sleep(self.sleep) + continue #title = self.paths[self.ix] if self.paths: From 3a85e84f417ee51237eeaa179ffcb74a3c4139de Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 24 Nov 2017 18:02:52 -0400 Subject: [PATCH 172/642] dear colin --- docs/nodice/colin.rst | 107 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 docs/nodice/colin.rst diff --git a/docs/nodice/colin.rst b/docs/nodice/colin.rst new file mode 100644 index 0000000..e81f601 --- /dev/null +++ b/docs/nodice/colin.rst @@ -0,0 +1,107 @@ +============ + Dear Colin +============ + +:: + + And also about your ideas, which I haven't understood at all so far. + +So where to begin? + + +Energy and matter +================= + +:: + + e = m * c * c + +c is the beat of time, let's set it to one. + + +Planck's constant +================= + +:: + + e = h * f + + momentum too, with conservation. + + +Gravity +======= + +:: + + f = G * a * b / (r * r) + +G turns up in two ways: gravitational force and inertial resistance + + +2015: gravitational waves are a thing. + +Time +==== + +Follow a wave, one full wavelength is a beat of time. + +And the length a unit of distance. + +A moving point. + +Light +===== + +A single wave, pi out of phase with the gravity field. + +Follows a geodesic in the background field. + +Quantum +======= + +Don't focus on the photon, its the whole field in play. + +But maybe the background fields super smooth? + +Polaroid Lenses +=============== + +Bell's inequaity + +Harmonic series +=============== + +Cosmic microwave background + + +Energy to matter +================ + +hydrogen + +electron + +proton + +Rotation +======== + +Recipe +====== + +Start with nothing, an empty space. + +Three dimensions passing through time. + +At the origin, a small sphere. + +Not so much a sphere, a dense core with a moon orbitting around. + +So the moon sends a wave of energy, which modulates the signal from +the nucleus below, as it too spins. + +Now imagine the surface of the sphere 2 * r from the origin. + +At time t, what of the sphere at t * r? + From dfb58bda6d1b1e64a30cceabd7bf652b7db9d2f1 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 24 Nov 2017 18:08:15 -0400 Subject: [PATCH 173/642] gravity waves in santo domingo --- docs/nodice/colin.rst | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/docs/nodice/colin.rst b/docs/nodice/colin.rst index e81f601..0a80fd0 100644 --- a/docs/nodice/colin.rst +++ b/docs/nodice/colin.rst @@ -105,3 +105,25 @@ Now imagine the surface of the sphere 2 * r from the origin. At time t, what of the sphere at t * r? +PyCaribbean +=========== + +It was in February 2015 in Santo Domingo, during the first PyCaribbean +that Brandon Rhodes gave a keynote. + +It was python's 25th birthday, give or take a day. + +Brandon described how python had been intimately involved in the LIGO +project which had just announced the detection of gravitational waves. + +It was an exciting time, full of possibilities. Talk of climate and +weather and music and more. + +Two years on I will be back in Santo Domingo this February. + +I will be giving a talk, showing some of the things I have worked on +since then. + +And sharing ideas that go who knows where? + +Raspberry pi, pi, pie and py. From 3e245db153b02dd0a703b68e8f9d17c42f063d98 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 27 Nov 2017 22:04:04 -0400 Subject: [PATCH 174/642] universe of new paradigms --- docs/nodice/colin.rst | 100 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/docs/nodice/colin.rst b/docs/nodice/colin.rst index 0a80fd0..a206032 100644 --- a/docs/nodice/colin.rst +++ b/docs/nodice/colin.rst @@ -105,6 +105,106 @@ Now imagine the surface of the sphere 2 * r from the origin. At time t, what of the sphere at t * r? +Mr Murphy +========= + +Mr Murphy was my physics teacher for four years at King Ecgbert School +in sunny Sheffield. + +"It works a lot better if you plug it in!". + +Experimental physics? + +:: + + F = m_1 * m _ 2 / r^2 + +And something about Kepler and equal areas in equal time. + +Parabola's, ellipses and hyperbolae? + +And special relativity. + +:: + + E = m c * c + +Equations of Minskoski space. + +The constant G, acceleration due to gravity. And this mysterious +thing inertia, which shared the same constant down to 10 decimal +places. + +And the Dore four two. Happy times. + +Warwick +======= + +Zeeman +------ + +Catastrophe +----------- + +Godel +----- + +Galois +------ + +Fermat +------ + +Fourier +------- + +Poincare +-------- + +Quantum +------- + +Information +----------- + +Mathematics and simulation +========================== + + +Ideas +===== + +:: + + This book provides a completely new approach to understanding the + universe. The main idea is that the principal objects in the + universe form a spectrum unified by the presence of a massive or + hypermassive black hole. These objects are variously called + quasars, active galaxies and spiral galaxies. The key to + understanding their dynamics is angular momentum and the key tool, + and main innovative idea of this work, is a proper formulation of + “Mach’s principle” using Sciama’s ideas. + +The first paragraph in Colin Rourke's, "A new paradigm for the +universe". + +Now there is an idea, and a good place to start. + +Start with gravitational waves. Add other things when you need, but +only when needed. + +:: + + Gravitational waves from centres of mass dance in celestial + harmony. + + Nature loves spirals. + + The quantum field is modulated by the beat of the surrounding + masses. + + As they spin, so they spin the surrounding field. + PyCaribbean =========== From b589caba55b166ed4c29d536882600928ba80f35 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 28 Nov 2017 00:05:04 -0400 Subject: [PATCH 175/642] more round objects --- docs/nodice/colin.rst | 44 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/docs/nodice/colin.rst b/docs/nodice/colin.rst index a206032..9173ba0 100644 --- a/docs/nodice/colin.rst +++ b/docs/nodice/colin.rst @@ -193,6 +193,50 @@ Now there is an idea, and a good place to start. Start with gravitational waves. Add other things when you need, but only when needed. +Draw a ball around your area of interest. + +Assume what comes in, and goes out, is below the noise. + +The idea if there is one here, is that these background gravitational +fields are extremely smooth in some sense. + +So, if you are a photon riding a geodesic, its a pretty smooth ride, +exceot when it isn't: starting and stopping. + +But this is illuminating when thinking about quantum phenomena. + +So, a photon is riding a wave which is in harmony with the background +wave around it, or striving to be so. + +Likewise, giant blackholes orbiting each other. + +But as you raise, it is the spin of these massive objects that affects +the way the surroundings evolve. + +If we think of a giant black hole, beating with the frequency of a +neutron, it's beat would move in sync with the surrounding background +beat of neutrons. If it is not spinning relative to its surroundings, +however you care to measure that, then it has no influence beyond the +point where its gravitational field goes below the noise. + +Since it is not spinning relative to the surroundings, it is not +modulating the background field. + +Now at this point I usually bail out to python code and try and +simulate, rather than write equations. + +I think the thing for me to do from here is to write some simulations +of my understanding of how a Sciama space works. + +For me, it is the inside of 3-sphere, where the influence at drops of +linearly with distance. I visualise this as a wave whose amplitude is +1/n at distance n. + +One other thought. When a spinning body's radiation drops to the +cosmic background level it is absorbing as much energy as it needs to +maintain its spin, so a self-sustaining system, given a constant +background. + :: Gravitational waves from centres of mass dance in celestial From 7ac2858e8b4f12aec0a15d6758cc35b9f43f7d22 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 2 Dec 2017 18:32:10 -0400 Subject: [PATCH 176/642] start wc group theory --- karmapi/wc.py | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 karmapi/wc.py diff --git a/karmapi/wc.py b/karmapi/wc.py new file mode 100644 index 0000000..df62562 --- /dev/null +++ b/karmapi/wc.py @@ -0,0 +1,133 @@ +""" World Cup + +Over the years I've done a few world cup predict the scores things. + +There's another one coming so here we go. + +Eight groups of four. + +And six games per group. + +Will likely turn into a simulation of errors. + +Prior? probabilities for games.. aim it to predict first and second in each +group for now as those will be the ones that get there. + +Things to include maybe... factors for order games are played. + +Oh and stuff like what will be going on at home by June 2018. + +Russia are the hosts, and I understand have graciously offered to represent the +USA and Italy too, sorry you couldn't make the party. + +Seek Irish, Scots or English for advice on how to survive when your team is not +there. + +""" + +# number of teams +n = 32 + +class Team: + + def __init__(self, name=None, prob=None) + """ Init the team with no name? """ + self.name= name + + self.prob = self.prob or 1 / n + +class Group: + + def __init__(self, teams=None, games=None): + + self.teams = teams + self.games = games + + def winner(self): + """ Pick a winner """ + return self.teams[random.randint(0, n-1)] + + def second(self): + """ Pick a second """ + return self.winner() + + +class Game: + + def __init__(self, a, b, when, where=None, ascore=None, bscore=None): + + self.a = a + self.b = b + self.when = when + + self.ascore = ascore or None + self.bscore = bscore or None + + def score(self): + """ Make up a score """ + ascore = random.randint(0, random.randint(0, 5)) + bscore = random.randint(0, random.randint(0, 5)) + + return self.ascore or ascore, self.bscore or bscore + + +# Group A +rus = Team('RUS') +sau = Team('SAU') +egy = Team('EGY') +urg = Team('URG') + +# Group B +por = Team('POR') +spa = Team('SPA') +mor = Team('MOR') +ira = Team('IRA') + +# group C +fra = Team('FRA') +aus = Team('AUS') +per = Team('PER') +den = Team('DEN') + +# group D +arg = Team('ARG') +ice = Team('ICE') +cro = Team('CRO') +nig = Team('NIG') + +# group E +bra = Team('BRA') +swi = Team('SWI') +crc = Team('CRC') +ser = Team('SER') + +# group F +ger = Team('GER') +swe = Team('SWE') +mex = Team('MEX') +sko = Team('SKO') + +# group G +bel = Team('BEL') +pan = Team('PAN') +tun = Team('TUN') +eng = Team('ENG') + +# group H +pol = Team('POL') +sen = Team('SEN') +col = Team('COL') +jap = Team('JAP') + + +groups = dict( + a=Group('a', teams = [rus, sau, egy, urg]), + b=Group('b', teams = [por, spa, mor, ira]), + c=Group('c', teams = [fra, aus, per, den]), + d=Group('d', teams = [arg, ice, cro, nig]), + e=Group('e', teams = [bra, swi, crc, ser]), + f=Group('f', teams = [ger, swe, mex, sko]), + g=Group('g', teams = [bel, pan, tun, eng]), + h=Group('h', teams = [pol, sen, col, jap])) + + From 7324b167835ab6fd2448e82f29f9008f4f9c2f29 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 2 Dec 2017 21:06:20 -0400 Subject: [PATCH 177/642] karma wc runs general confusion --- karmapi/wc.py | 53 +++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 41 insertions(+), 12 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index df62562..0baf30c 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -23,25 +23,27 @@ Seek Irish, Scots or English for advice on how to survive when your team is not there. -""" +All times are UTC and subject to typos and other delights. +""" +from datetime import datetime, timedelta # number of teams n = 32 class Team: - def __init__(self, name=None, prob=None) + def __init__(self, name=None, win=None): """ Init the team with no name? """ self.name= name - self.prob = self.prob or 1 / n + self.win = win or 1 / n class Group: def __init__(self, teams=None, games=None): self.teams = teams - self.games = games + self.games = games or [] def winner(self): """ Pick a winner """ @@ -121,13 +123,40 @@ def score(self): groups = dict( - a=Group('a', teams = [rus, sau, egy, urg]), - b=Group('b', teams = [por, spa, mor, ira]), - c=Group('c', teams = [fra, aus, per, den]), - d=Group('d', teams = [arg, ice, cro, nig]), - e=Group('e', teams = [bra, swi, crc, ser]), - f=Group('f', teams = [ger, swe, mex, sko]), - g=Group('g', teams = [bel, pan, tun, eng]), - h=Group('h', teams = [pol, sen, col, jap])) + a=Group(teams = [rus, sau, egy, urg], + games = [ + Game(rus, sau, datetime(2018, 6, 14, 15, 0)), + + Game(egy, urg, datetime(2018, 6, 15, 12, 0)), + + Game(rus, egy, datetime(2018, 6, 19, 18, 0)), + Game(urg, sau, datetime(2018, 6, 19, 18, 0)), + + Game(urg, rus, datetime(2018, 6, 19, 14, 0)), + Game(sau, egy, datetime(2018, 6, 19, 14, 0)), + ]), + b=Group(teams = [por, spa, mor, ira]), + c=Group(teams = [fra, aus, per, den]), + d=Group(teams = [arg, ice, cro, nig]), + e=Group(teams = [bra, swi, crc, ser]), + f=Group(teams = [ger, swe, mex, sko]), + g=Group(teams = [bel, pan, tun, eng]), + h=Group(teams = [pol, sen, col, jap])) + + + +# notes? +groups['a'].notes = [ + ] + +# do something ? + +# print out the games +for xx, group in groups.items(): + print(xx) + for game in group.games: + print(game.a, game.b, game.when) + + print() From 6e6e533a5d9a352b0bef769b7b7182eb8daf3209 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 2 Dec 2017 21:40:21 -0400 Subject: [PATCH 178/642] fixtures coming along.. --- karmapi/wc.py | 138 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 130 insertions(+), 8 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 0baf30c..e5615ae 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -25,6 +25,25 @@ All times are UTC and subject to typos and other delights. +The story so far. + +It's December 2017. World Cup finals draw in Russia is out. + +Italy and USA are already out. Sweden eliminated Italy and the USA story is more complex. + +On the Mueller advent calendar Michael Flynn pleaded guilty on the 1st. + +Picture wasn't clear on the 2nd. 3-4 maybe more faces? + +Back to the world cup. + +Group A. + +rus sau egy urg + + + + """ from datetime import datetime, timedelta # number of teams @@ -38,6 +57,10 @@ def __init__(self, name=None, win=None): self.win = win or 1 / n + def __str__(self): + + return self.name + class Group: def __init__(self, teams=None, games=None): @@ -53,6 +76,10 @@ def second(self): """ Pick a second """ return self.winner() + def __str__(self): + + return str(self.teams, self.games) + class Game: @@ -128,20 +155,115 @@ def score(self): Game(rus, sau, datetime(2018, 6, 14, 15, 0)), Game(egy, urg, datetime(2018, 6, 15, 12, 0)), + Game(rus, egy, datetime(2018, 6, 19, 18, 0)), - Game(urg, sau, datetime(2018, 6, 19, 18, 0)), + Game(urg, sau, datetime(2018, 6, 20, 15, 0)), Game(urg, rus, datetime(2018, 6, 19, 14, 0)), Game(sau, egy, datetime(2018, 6, 19, 14, 0)), ]), - b=Group(teams = [por, spa, mor, ira]), - c=Group(teams = [fra, aus, per, den]), - d=Group(teams = [arg, ice, cro, nig]), - e=Group(teams = [bra, swi, crc, ser]), - f=Group(teams = [ger, swe, mex, sko]), - g=Group(teams = [bel, pan, tun, eng]), - h=Group(teams = [pol, sen, col, jap])) + + b=Group(teams = [por, spa, mor, ira], + games = [ + Game(mor, iran, datetime(2018, 6, 15, 15, 0)), + Game(por, spa, datetime(2018, 6, 15, 18, 0)), + + + Game(por, mor, datetime(2018, 6, 20, 12, 0)), + Game(ira, spa, datetime(2018, 6, 20, 18, 0)), + + Game(ira, por, datetime(2018, 6, 25, 18, 0)), + Game(spa, mor, datetime(2018, 6, 25, 18, 0)), + ]), + + c=Group(teams = [fra, aus, per, den], + + games = [ + Game(fra, aus, datetime(2018, 6, 16, 10, 0)), + Game(per, den, datetime(2018, 6, 16, 14, 0)), + + + Game(den, aus, datetime(2018, 6, 21, 12, 0)), + Game(fra, per, datetime(2018, 6, 21, 15, 0)), + + Game(den, fra, datetime(2018, 6, 26, 14, 0)), + Game(aus, per, datetime(2018, 6, 26, 14, 0)), + ]), + + d=Group(teams = [arg, ice, cro, nig], + + games = [ + Game(arg, ice, datetime(2018, 6, 16, 13, 0)), + + Game(cro, nig, datetime(2018, 6, 16, 19, 0)), + + + Game(arg, cro, datetime(2018, 6, 21, 18, 0)), + Game(nig, ice, datetime(2018, 6, 22, 15, 0)), + + Game(nig, arg, datetime(2018, 6, 26, 18, 0)), + Game(ice, cro, datetime(2018, 6, 26, 18, 0)), + ]), + + e=Group(teams = [bra, swi, crc, ser], + + games = [ + Game(crc, ser, datetime(2018, 6, 17, 12, 0)), + Game(bra, swi, datetime(2018, 6, 17, 18, 0)), + + + Game(bra, crc, datetime(2018, 6, 22, 12, 0)), + Game(ser, swi, datetime(2018, 6, 22, 18, 0)), + + Game(ser, bra, datetime(2018, 6, 27, 18, 0)), + Game(swi, crc, datetime(2018, 6, 27, 18, 0)), + ]), + + f=Group(teams = [ger, swe, mex, sko], + + games = [ + Game(ger, mex, datetime(2018, 6, 17, 15, 0)), + Game(swe, sko, datetime(2018, 6, 18, 12, 0)), + + + Game(sko, mex, datetime(2018, 6, 23, 15, 0)), + Game(ger, swe, datetime(2018, 6, 23, 18, 0)), + + Game(sko, ger, datetime(2018, 6, 27, 14, 0)), + Game(mex, swe, datetime(2018, 6, 27, 14, 0)), + ]), + + g=Group(teams = [bel, pan, tun, eng], + + games = [ + Game(, , datetime(2018, 6, 14, 15, 0)), + + Game(, , datetime(2018, 6, 15, 12, 0)), + + + Game(, , datetime(2018, 6, 19, 18, 0)), + Game(, , datetime(2018, 6, 20, 15, 0)), + + Game(, , datetime(2018, 6, 19, 14, 0)), + Game(, , datetime(2018, 6, 19, 14, 0)), + ]), + + h=Group(teams = [pol, sen, col, jap], + + games = [ + Game(, , datetime(2018, 6, 14, 15, 0)), + + Game(, , datetime(2018, 6, 15, 12, 0)), + + + Game(, , datetime(2018, 6, 19, 18, 0)), + Game(, , datetime(2018, 6, 20, 15, 0)), + + Game(, , datetime(2018, 6, 19, 14, 0)), + Game(, , datetime(2018, 6, 19, 14, 0)), + ])) + From f37e5e46dc40cac9c8f3d63dffcdf07ca36ef4b9 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 2 Dec 2017 21:50:36 -0400 Subject: [PATCH 179/642] fixtures maybe up and running --- karmapi/wc.py | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index e5615ae..cf1e6c5 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -158,15 +158,17 @@ def score(self): Game(rus, egy, datetime(2018, 6, 19, 18, 0)), + Game(urg, sau, datetime(2018, 6, 20, 15, 0)), + Game(urg, rus, datetime(2018, 6, 19, 14, 0)), Game(sau, egy, datetime(2018, 6, 19, 14, 0)), ]), b=Group(teams = [por, spa, mor, ira], games = [ - Game(mor, iran, datetime(2018, 6, 15, 15, 0)), + Game(mor, ira, datetime(2018, 6, 15, 15, 0)), Game(por, spa, datetime(2018, 6, 15, 18, 0)), @@ -200,7 +202,9 @@ def score(self): Game(arg, cro, datetime(2018, 6, 21, 18, 0)), + Game(nig, ice, datetime(2018, 6, 22, 15, 0)), + Game(nig, arg, datetime(2018, 6, 26, 18, 0)), Game(ice, cro, datetime(2018, 6, 26, 18, 0)), @@ -224,6 +228,7 @@ def score(self): games = [ Game(ger, mex, datetime(2018, 6, 17, 15, 0)), + Game(swe, sko, datetime(2018, 6, 18, 12, 0)), @@ -237,31 +242,30 @@ def score(self): g=Group(teams = [bel, pan, tun, eng], games = [ - Game(, , datetime(2018, 6, 14, 15, 0)), - - Game(, , datetime(2018, 6, 15, 12, 0)), + Game(bel, pan, datetime(2018, 6, 18, 15, 0)), + Game(tun, eng, datetime(2018, 6, 18, 18, 0)), - Game(, , datetime(2018, 6, 19, 18, 0)), - Game(, , datetime(2018, 6, 20, 15, 0)), + Game(bel, tun, datetime(2018, 6, 23, 12, 0)), - Game(, , datetime(2018, 6, 19, 14, 0)), - Game(, , datetime(2018, 6, 19, 14, 0)), + Game(eng, pan, datetime(2018, 6, 24, 12, 0)), + + Game(eng, bel, datetime(2018, 6, 28, 18, 0)), + Game(pan, tun, datetime(2018, 6, 28, 18, 0)), ]), h=Group(teams = [pol, sen, col, jap], games = [ - Game(, , datetime(2018, 6, 14, 15, 0)), - - Game(, , datetime(2018, 6, 15, 12, 0)), + Game(col, jap, datetime(2018, 6, 19, 12, 0)), + Game(pol, sen, datetime(2018, 6, 19, 15, 0)), - Game(, , datetime(2018, 6, 19, 18, 0)), - Game(, , datetime(2018, 6, 20, 15, 0)), + Game(jap, sen, datetime(2018, 6, 24, 15, 0)), + Game(pol, col, datetime(2018, 6, 24, 18, 0)), - Game(, , datetime(2018, 6, 19, 14, 0)), - Game(, , datetime(2018, 6, 19, 14, 0)), + Game(jap, pol, datetime(2018, 6, 28, 14, 0)), + Game(sen, col, datetime(2018, 6, 28, 14, 0)), ])) From 21f226e991ab75d2ff609aa4ef6820a1eac839e6 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 2 Dec 2017 21:57:07 -0400 Subject: [PATCH 180/642] more wc story so far.. --- karmapi/wc.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/karmapi/wc.py b/karmapi/wc.py index cf1e6c5..d6b6c69 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -42,7 +42,27 @@ rus sau egy urg +OK.. back from the fixture lists. +Order of games interesting and need to add places. Fair bit of moving around +in some groups. + +Some teams get to play after seeing the other game in their group in first two +rounds of games. + +As groups progress teams will be looking at what comes next, if they have a +couple of wins, or otherwise just how to get out of the group. + +Seeding has placed the teams with higher FIFA rankings with potentially less +travel complications, but then there are the fans back home and time zone +considerations. + +Now it is 2017 so there may be an obligatory block chain connection, but if so +it well be super low tech. + +And simulations. For now stuck deciding what to simulate.. oh and priors.. + +I think we may need some events here soon. """ from datetime import datetime, timedelta From 52addd1d3c5b81022c876228fee22ea8142aea74 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 3 Dec 2017 16:17:32 -0400 Subject: [PATCH 181/642] jeux sans frontieres --- karmapi/wc.py | 69 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 67 insertions(+), 2 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index d6b6c69..017f497 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -64,6 +64,31 @@ I think we may need some events here soon. +Back to the coding. So rule 0: keep it under 1000 lines, bonus marks under +500. World cup rules, so you decide how to count. + +Subtracting docstrings there should be a lot less. And with luck sphinx will +magically turn the code into ok docs. + +rule 1: there is no rule one. It's the world cup, so breaking all the coding +rules. See also counting lines of code, world cup style. + +Or rather just writing what seems easiest at the time. + +There is a fair bit of going round in circles: check the commit log see git. + +Ok.. back to the football. + +The world cup mixes up 32 teams from around the world. The final draw mixes +everything up and there are some fascinating match ups. + +Simon Kuiper, football anthropologist?, wrote a fascinating book about matches +between countries, places that had been at war in the very recent past. Many +of the games covered were at world cups or big football federation finals. + +Others were just qualifying games. + + """ from datetime import datetime, timedelta # number of teams @@ -100,6 +125,26 @@ def __str__(self): return str(self.teams, self.games) +class JeuxSansFrontieres: + """ The knockout stage. + + Winners and seconds from group stage come through into a + last 16 grid that looks something like this: + + w r + w r w w w w w w W + + w r w w + w r + + w r w w w w + w r + + w r w w + w r + + + """ class Game: @@ -118,7 +163,8 @@ def score(self): bscore = random.randint(0, random.randint(0, 5)) return self.ascore or ascore, self.bscore or bscore - + + # Group A rus = Team('RUS') @@ -287,12 +333,31 @@ def score(self): Game(jap, pol, datetime(2018, 6, 28, 14, 0)), Game(sen, col, datetime(2018, 6, 28, 14, 0)), ])) - +# group winners and seconds +winners = {} +seconds = {} +for group in 'abcdefgh': + winners[group] = group.winner() + seconds[group] = group.second() + + + + # notes? groups['a'].notes = [ +j """ Group A + + Russia + + Uruguay + + Egypt + + Saudi Arabia + """ ] # do something ? From e722bdeb80a255ccfe8b3aa24c5144f057ad44c6 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 3 Dec 2017 16:26:41 -0400 Subject: [PATCH 182/642] winner runner up third and fourth --- karmapi/wc.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 017f497..12e930a 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -132,12 +132,12 @@ class JeuxSansFrontieres: last 16 grid that looks something like this: w r - w r w w w w w w W + w r w w w w w w W r w r w w w r - w r w w w w + w r w w w w s s T f w r w r w w From e1cdeb6c6b875d5a0b035726320017d57f2d2076 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 3 Dec 2017 21:37:38 -0400 Subject: [PATCH 183/642] its a knockout and places --- karmapi/wc.py | 64 +++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 55 insertions(+), 9 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 12e930a..95435de 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -131,17 +131,20 @@ class JeuxSansFrontieres: Winners and seconds from group stage come through into a last 16 grid that looks something like this: - w r - w r w w w w w w W r + wa rb + wc rd w w w w w w W r - w r w w - w r + we rf w w + wg rh - w r w w w w s s T f - w r + wb ra w w w w s s T f + wd rc - w r w w - w r + wf re w w + wh rg + + with abcdefgh + and badcfehg """ @@ -164,7 +167,50 @@ def score(self): return self.ascore or ascore, self.bscore or bscore - + +class Place: + pass + +class Moscow(Place): + """ Moscow """ + + name = 'Moscow' + lat = None + lon = None + +class Moscow(Place): + """ Moscow """ + + name = 'Moscow' + lat = None + lon = None + +class Moscow(Place): + """ Moscow """ + + name = 'Moscow' + lat = None + lon = None + +class Moscow(Place): + """ Moscow """ + + name = 'Moscow' + lat = None + lon = None +class Moscow(Place): + """ Moscow """ + + name = 'Moscow' + lat = None + lon = None +class Moscow(Place): + """ Moscow """ + + name = 'Moscow' + lat = None + lon = None + # Group A rus = Team('RUS') From 737beee61e61827480dcf8ddfb395b473267ba6d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 3 Dec 2017 22:38:42 -0400 Subject: [PATCH 184/642] rostov-on-don sheffield in russia --- karmapi/wc.py | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 95435de..cd6c493 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -172,38 +172,46 @@ class Place: pass class Moscow(Place): - """ Moscow """ + """ Capital """ name = 'Moscow' lat = None - lon = None + lon = None -class Moscow(Place): - """ Moscow """ +class StPetersberg(Place): + """ Place of many names """ - name = 'Moscow' + name = 'St Petersberg' lat = None lon = None -class Moscow(Place): - """ Moscow """ +class Volgograd(Place): + """ Down south """ - name = 'Moscow' + name = 'Volgograd' lat = None lon = None -class Moscow(Place): - """ Moscow """ +class Novgorod(Place): + """ Central """ - name = 'Moscow' + name = 'Nizhny Novgorod' lat = None lon = None -class Moscow(Place): - """ Moscow """ + +class Kaliningrad(Place): + """ North West port """ - name = 'Moscow' + name = 'Kaliningrad' lat = None lon = None + +class RostovOnDon(Place): + """ Sheffield in Russia """ + name "Rostov-on-Don" + lat = None + lon = None + class Moscow(Place): """ Moscow """ From 9f3438322cb8107896be5a18330a10ef140f1008 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 4 Dec 2017 00:56:30 -0400 Subject: [PATCH 185/642] more places to discover --- karmapi/wc.py | 104 +++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 81 insertions(+), 23 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index cd6c493..0eaf8d4 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -88,9 +88,22 @@ Others were just qualifying games. +Sources: Wikipedia and scriblings on beer mats. + +Places coming along. + +Rostov-on-Don. Lots of twin towns, including Toronto. + +Some interesting games there too. + +545km to the south """ + +import random + from datetime import datetime, timedelta + # number of teams n = 32 @@ -115,7 +128,8 @@ def __init__(self, teams=None, games=None): def winner(self): """ Pick a winner """ - return self.teams[random.randint(0, n-1)] + nteams = len(self.teams) + return self.teams[random.randint(0, nteams-1)] def second(self): """ Pick a second """ @@ -172,9 +186,16 @@ class Place: pass class Moscow(Place): - """ Capital """ + """ Final """ + + name = 'Moscow Luzhniki' + lat = None + lon = None + +class Spartak(Place): + """ Spartak Moscow """ - name = 'Moscow' + name = 'Moscow Oktkrytiye' lat = None lon = None @@ -208,17 +229,67 @@ class Kaliningrad(Place): class RostovOnDon(Place): """ Sheffield in Russia """ - name "Rostov-on-Don" + name = "Rostov-on-Don" lat = None lon = None -class Moscow(Place): - """ Moscow """ +class Kazan(Place): + """ """ - name = 'Moscow' + name = '' lat = None lon = None +class Samara(Place): + """ """ + + name = 'Samara' + lat = None + lon = None + +class Yekaterinburg(Place): + """ """ + + name = '' + lat = None + lon = None + +class Saransk(Place): + """ """ + + name = '' + lat = None + lon = None + +class Sochi(Place): + """ """ + + name = '' + lat = None + lon = None + + + +places = [ + + Moscow(), + Spartak(), + StPetersberg(), + + Kaliningrad(), + + Novgorod(), + Yekaterinburg(), + Kazan(), + Saransk(), + Samara(), + + Volgograd(), + RostovOnDon(), + Sochi(), + + ] + # Group A rus = Team('RUS') @@ -391,28 +462,15 @@ class Moscow(Place): # group winners and seconds winners = {} seconds = {} -for group in 'abcdefgh': +for item in 'abcdefgh': + group = groups[item] + winners[group] = group.winner() seconds[group] = group.second() - - -# notes? -groups['a'].notes = [ -j """ Group A - - Russia - - Uruguay - - Egypt - - Saudi Arabia - """ - ] # do something ? From 4957070909e187d54928f0937d6c32954fb8e9d2 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 4 Dec 2017 03:50:42 -0400 Subject: [PATCH 186/642] simulate jeux sans frontieres sort of --- karmapi/wc.py | 54 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 0eaf8d4..a865952 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -162,6 +162,48 @@ class JeuxSansFrontieres: """ + def __init__(self, groups, places=None, dates=None): + """ Set up knockout stage """ + key = sorted(groups.keys()) + + key = list(key) + print(key) + + key2 = '' + for x in range(0, len(key), 2): + key2 += key[x+1] + key[x] + + print(key2) + + games = [] + + for gps in key, key2: + for x in range(0, len(key), 2): + + a = key[x] + b = key[x+1] + teama = groups[a].winner() + teamb = groups[b].second() + + games.append([teama, teamb]) + + dates = dates or [datetime.today()] * len(games) + + for game, date in zip(games, dates): + game.append(date) + + places = places or (['???'] * len(games)) + for game, place in zip(games, places): + game.append(place) + + self.games = [] + for teama, teamb, when, place in games: + self.games.append(Game(teama, teamb, when, place)) + + for game in self.games: + print(game) + + class Game: @@ -170,6 +212,7 @@ def __init__(self, a, b, when, where=None, ascore=None, bscore=None): self.a = a self.b = b self.when = when + self.where = where self.ascore = ascore or None self.bscore = bscore or None @@ -181,6 +224,10 @@ def score(self): return self.ascore or ascore, self.bscore or bscore + def __str__(self): + + return f'{self.a.name} {self.b.name} {self.when} {self.where}' + class Place: pass @@ -470,8 +517,6 @@ class Sochi(Place): seconds[group] = group.second() - - # do something ? # print out the games @@ -483,3 +528,8 @@ class Sochi(Place): print(game.a, game.b, game.when) print() + +# Simulate a knockout draw + bugs +jsf = JeuxSansFrontieres(groups) + + From 050443e9d7f69f24e257a53a29ebd362aff7383c Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 5 Dec 2017 12:13:39 -0400 Subject: [PATCH 187/642] wc run groups, print tables --- karmapi/wc.py | 74 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 71 insertions(+), 3 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index a865952..006d5f8 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -101,6 +101,7 @@ """ import random +import argparse from datetime import datetime, timedelta @@ -112,9 +113,15 @@ class Team: def __init__(self, name=None, win=None): """ Init the team with no name? """ self.name= name + self.points = 0 + self.yellow = 0 + self.red = 0 + self.goals = 0 + self.against = 0 self.win = win or 1 / n + def __str__(self): return self.name @@ -139,6 +146,61 @@ def __str__(self): return str(self.teams, self.games) + def run(self): + """ Run the group """ + for game in self.games: + + print() + print (game) + print() + + ascore = game.ascore + bscore = game.bscore + + # if either score is None, call score + if game.ascore == None or game.bscore == None: + ascore, bscore = game.score() + + print(f'{ascore} {bscore}') + print() + + a = game.a + b = game.b + + a.goals += ascore + b.goals += bscore + + a.against += bscore + b.against += ascore + + if ascore > bscore: + a.points += 3 + + elif bscore > bscore: + b.points += bscore + + else: + a.points += 1 + b.points += 1 + + def table(self): + """ Show the group table """ + teams = list(self.teams) + + teams = sorted(teams, key=self.tablesort) + + for team in teams: + print(team) + + def tablesort(self, key): + """ Order teams """ + print(type(key)) + + return key.points, key.goals - key.against, key.goals + + + + class JeuxSansFrontieres: """ The knockout stage. @@ -480,8 +542,8 @@ class Sochi(Place): g=Group(teams = [bel, pan, tun, eng], games = [ - Game(bel, pan, datetime(2018, 6, 18, 15, 0)), - Game(tun, eng, datetime(2018, 6, 18, 18, 0)), + Game(bel, pan, datetime(2018, 6, 18, 15, 0), ascore=3, bscore=1), + Game(tun, eng, datetime(2018, 6, 18, 18, 0), ascore=0, bscore=0), Game(bel, tun, datetime(2018, 6, 23, 12, 0)), @@ -526,9 +588,15 @@ class Sochi(Place): for game in group.games: print(game.a, game.b, game.when) - + + print() + group.run() print() + group.table() + + + # Simulate a knockout draw + bugs jsf = JeuxSansFrontieres(groups) From 299cf3162f817398c76e2d19098f1c102dc31de3 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 5 Dec 2017 12:16:53 -0400 Subject: [PATCH 188/642] wc run groups, print tables --- karmapi/wc.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 006d5f8..13df9fb 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -194,8 +194,6 @@ def table(self): def tablesort(self, key): """ Order teams """ - print(type(key)) - return key.points, key.goals - key.against, key.goals From ce03b4e32e36544482dbec3fc22a93586993abb5 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 5 Dec 2017 12:31:39 -0400 Subject: [PATCH 189/642] wc starting to be useful --- karmapi/wc.py | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 13df9fb..0eca143 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -124,7 +124,10 @@ def __init__(self, name=None, win=None): def __str__(self): - return self.name + msg = f'{self.name} {self.points:3}' + msg +=f'{self.goals - self.against:4} {self.goals:4} {self.against:4}' + + return msg class Group: @@ -135,12 +138,11 @@ def __init__(self, teams=None, games=None): def winner(self): """ Pick a winner """ - nteams = len(self.teams) - return self.teams[random.randint(0, nteams-1)] + return self.get_table()[0] def second(self): """ Pick a second """ - return self.winner() + return self.get_table()[1] def __str__(self): @@ -185,12 +187,19 @@ def run(self): def table(self): """ Show the group table """ + teams = self.get_table() + + for team in teams: + print(team) + + + def get_table(self): + """ Return teams sorted per table """ teams = list(self.teams) teams = sorted(teams, key=self.tablesort) - for team in teams: - print(team) + return list(reversed(teams)) def tablesort(self, key): """ Order teams """ @@ -240,8 +249,9 @@ def __init__(self, groups, places=None, dates=None): for gps in key, key2: for x in range(0, len(key), 2): - a = key[x] - b = key[x+1] + a = gps[x] + b = gps[x+1] + teama = groups[a].winner() teamb = groups[b].second() @@ -594,6 +604,8 @@ class Sochi(Place): group.table() +print() +print("It's a knock out!") # Simulate a knockout draw + bugs jsf = JeuxSansFrontieres(groups) From b9397470fc6be323d1b8fbc984a44a2e3595d5ee Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 5 Dec 2017 22:10:41 -0400 Subject: [PATCH 190/642] new filly info and world cup simulation? --- karmapi/filly.py | 6 +++++- karmapi/wc.py | 22 +++++++++++++++++----- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/karmapi/filly.py b/karmapi/filly.py index bb21187..f740b1f 100644 --- a/karmapi/filly.py +++ b/karmapi/filly.py @@ -334,12 +334,16 @@ def score(self): ophelia = Event('ophelia', 2, 0.8), mexicoq = Event('mexico', 25, 0.5), calfire = Event('calfire', 10, 0.8), - ) + + # meta events + bdaharirm = Event("Bermuda Harvey Irma", 15, 1.0), + ) MoreEvents = dict( ophelia = Event('ophelia', 10, 0.8), ) + q3 = [x for x in Events.values()] # Reports so far on losses diff --git a/karmapi/wc.py b/karmapi/wc.py index 0eca143..67dbbc1 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -98,6 +98,17 @@ 545km to the south +Simulations +=========== + +Run the code and you get a draw for the last 16. + +I am starting to simulate the first round games with 4 bottles in a pool. It's +like Paul the octobpus, but not quite so scientific. Or maybe it is? + +eng tun bel and pan played already. See Game's for results. + + """ import random @@ -159,6 +170,7 @@ def run(self): ascore = game.ascore bscore = game.bscore + print(ascore, bscore) # if either score is None, call score if game.ascore == None or game.bscore == None: ascore, bscore = game.score() @@ -283,9 +295,9 @@ def __init__(self, a, b, when, where=None, ascore=None, bscore=None): self.b = b self.when = when self.where = where - - self.ascore = ascore or None - self.bscore = bscore or None + + self.ascore = ascore + self.bscore = bscore def score(self): """ Make up a score """ @@ -460,9 +472,9 @@ class Sochi(Place): groups = dict( a=Group(teams = [rus, sau, egy, urg], games = [ - Game(rus, sau, datetime(2018, 6, 14, 15, 0)), + Game(rus, sau, datetime(2018, 6, 14, 15, 0), ascore=4, bscore=0), - Game(egy, urg, datetime(2018, 6, 15, 12, 0)), + Game(egy, urg, datetime(2018, 6, 15, 12, 0), ascore=1, bscore=2), Game(rus, egy, datetime(2018, 6, 19, 18, 0)), From 336924778dc282333e18614dcf8b99e98c761f64 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 5 Dec 2017 23:09:31 -0400 Subject: [PATCH 191/642] filly tinkering --- karmapi/filly.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/karmapi/filly.py b/karmapi/filly.py index f740b1f..58260ae 100644 --- a/karmapi/filly.py +++ b/karmapi/filly.py @@ -335,8 +335,11 @@ def score(self): mexicoq = Event('mexico', 25, 0.5), calfire = Event('calfire', 10, 0.8), - # meta events - bdaharirm = Event("Bermuda Harvey Irma", 15, 1.0), + # meta events 15B to Bermuda reinsurers. Say it + # really looks like 3 * 40B events. + # So numbers for orgs should be roughly in line + # compare to other losses... note no Maria? + bdaharirm = Event("Bermuda Harvey Irma", 120, 1.0), ) MoreEvents = dict( From cd52e5954ad42a2b739a5457d25b2c2e8780d46d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 5 Dec 2017 23:35:16 -0400 Subject: [PATCH 192/642] sphinx is back --- docs/easter.png | Bin 0 -> 948694 bytes docs/index.rst | 25 +++++++++++++++++++++++-- karmapi/wc.py | 8 +++++++- 3 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 docs/easter.png diff --git a/docs/easter.png b/docs/easter.png new file mode 100644 index 0000000000000000000000000000000000000000..546d7d3bbacfee4784610d416d99763d72f61715 GIT binary patch literal 948694 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 z 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

&t`X}4-E8xNwMa65|{T#{vy@?D{c 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≫Gp?ngOPskouY!F|O2jafn3) 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%0DneGZVya4Dx|6jofl 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 F{||NBPx}A> literal 0 HcmV?d00001 diff --git a/docs/index.rst b/docs/index.rst index 99489e5..53f2697 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -13,6 +13,27 @@ Contents: karmapi + nodice/eagle.rst + + +Tankrain +======== + +.. automodule:: karmapi.tankrain + :members: + :undoc-members: + :show-inheritance: + +Jeux sans frontieres +==================== + +.. automodule:: karmapi.wc + :members: + :undoc-members: + :show-inheritance: + + + PyCaribbean =========== @@ -55,8 +76,8 @@ Eric .. toctree:: eric - - + + Indices and tables ================== diff --git a/karmapi/wc.py b/karmapi/wc.py index 67dbbc1..5451039 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -363,7 +363,13 @@ class RostovOnDon(Place): lon = None class Kazan(Place): - """ """ + """ + + https://tools.wmflabs.org/geohack/geohack.php? + + pagename=Kazan_Arena& + + params=55_49_14.3_N_49_9_40.0_E_type:landmark """ name = '' lat = None From a4cc7c501d0d1f6810b3b1a7c269c363ad2d08a0 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 6 Dec 2017 00:49:46 -0400 Subject: [PATCH 193/642] wc locations started --- karmapi/wc.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 5451039..784dcc6 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -318,15 +318,16 @@ class Moscow(Place): """ Final """ name = 'Moscow Luzhniki' - lat = None - lon = None + lat = 55 + (45 / 60) + lon = 37 + (37 / 60) class Spartak(Place): """ Spartak Moscow """ name = 'Moscow Oktkrytiye' - lat = None - lon = None + lat = 55 + (49 / 60) + lon = 37 + (26 / 60) + class StPetersberg(Place): """ Place of many names """ @@ -371,9 +372,9 @@ class Kazan(Place): params=55_49_14.3_N_49_9_40.0_E_type:landmark """ - name = '' - lat = None - lon = None + name = 'Kazan' + lat = 55 + (49 / 60) + (14.3 / 3600) + lon = 49 + (9 / 60) + (40.0 / 3600) class Samara(Place): """ """ From f43c8e5d7ed9c02c63bd9a392aaf2b4072821f04 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 6 Dec 2017 11:36:25 -0400 Subject: [PATCH 194/642] wc bottle simulated first round scores --- karmapi/wc.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 784dcc6..810f350 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -495,8 +495,8 @@ class Sochi(Place): b=Group(teams = [por, spa, mor, ira], games = [ - Game(mor, ira, datetime(2018, 6, 15, 15, 0)), - Game(por, spa, datetime(2018, 6, 15, 18, 0)), + Game(mor, ira, datetime(2018, 6, 15, 15, 0), ascore=2, bscore=2), + Game(por, spa, datetime(2018, 6, 15, 18, 0), ascore=3, bscore=2), Game(por, mor, datetime(2018, 6, 20, 12, 0)), From ac64abcb113f607298a110e3f594d25748f09ece Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 6 Dec 2017 18:16:06 -0400 Subject: [PATCH 195/642] feedback from the editor --- docs/nodice/colin2.rst | 68 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 docs/nodice/colin2.rst diff --git a/docs/nodice/colin2.rst b/docs/nodice/colin2.rst new file mode 100644 index 0000000..45d6d8e --- /dev/null +++ b/docs/nodice/colin2.rst @@ -0,0 +1,68 @@ +============ + Dear Colin +============ + + :: + + This book provides a completely new approach to understanding the + universe. The main idea is that the principal objects in the + universe form a spectrum unified by the presence of a massive or + hypermassive black hole. These objects are variously called + quasars, active galaxies and spiral galaxies. The key to + understanding their dynamics is angular momentum and the key tool, + and main innovative idea of this work, is a proper formulation of + “Mach’s principle” using Sciama’s ideas. + +The first paragraph in Colin Rourke's, "A new paradigm for the +universe". + +Feedback from chief editor was that more explanation was needed. + +First of all, I mentioned a lot of people, particularly in the fields +of mathematics and theoretical physics. + +I think all of them have been in some way trying to describe wider +pictures. + +And it feels like there is nothing that I am thinking that has not +been thought before. + +I still have not made it back to a second read of your book, but have +been thinking a lot about Sciama spaces, Minkowski too with some +Poincare too. + +Now these are all things others understand better than me. + + + +:: + + spectrum unified by rotating masses + + +Solar System +============ + +Gravity +======= + + +Magentism +========= + +Cosmic Microwave Background +=========================== + +Black hole spirals +================== + +Big bang??? + +When? + + + +Waves +===== + +Energy mass and rotation. From 17846895eae60f96e5ddcb99b586f89d44b17b7c Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 7 Dec 2017 16:37:24 -0400 Subject: [PATCH 196/642] argentina 3 iceland 2 croatia 2 nigeria 2 --- karmapi/wc.py | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 810f350..b112753 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -479,9 +479,11 @@ class Sochi(Place): groups = dict( a=Group(teams = [rus, sau, egy, urg], games = [ - Game(rus, sau, datetime(2018, 6, 14, 15, 0), ascore=4, bscore=0), + Game(rus, sau, datetime(2018, 6, 14, 15, 0), + ascore=4, bscore=0), - Game(egy, urg, datetime(2018, 6, 15, 12, 0), ascore=1, bscore=2), + Game(egy, urg, datetime(2018, 6, 15, 12, 0), + ascore=1, bscore=2), Game(rus, egy, datetime(2018, 6, 19, 18, 0)), @@ -495,8 +497,11 @@ class Sochi(Place): b=Group(teams = [por, spa, mor, ira], games = [ - Game(mor, ira, datetime(2018, 6, 15, 15, 0), ascore=2, bscore=2), - Game(por, spa, datetime(2018, 6, 15, 18, 0), ascore=3, bscore=2), + Game(mor, ira, datetime(2018, 6, 15, 15, 0), + ascore=2, bscore=2), + + Game(por, spa, datetime(2018, 6, 15, 18, 0), + ascore=3, bscore=2), Game(por, mor, datetime(2018, 6, 20, 12, 0)), @@ -509,8 +514,11 @@ class Sochi(Place): c=Group(teams = [fra, aus, per, den], games = [ - Game(fra, aus, datetime(2018, 6, 16, 10, 0)), - Game(per, den, datetime(2018, 6, 16, 14, 0)), + Game(fra, aus, datetime(2018, 6, 16, 10, 0), + ascore=1, bscore=2), + + Game(per, den, datetime(2018, 6, 16, 14, 0), + ascore=2, bscore=2), Game(den, aus, datetime(2018, 6, 21, 12, 0)), @@ -523,9 +531,11 @@ class Sochi(Place): d=Group(teams = [arg, ice, cro, nig], games = [ - Game(arg, ice, datetime(2018, 6, 16, 13, 0)), + Game(arg, ice, datetime(2018, 6, 16, 13, 0), + ascore=3, bscore=2), - Game(cro, nig, datetime(2018, 6, 16, 19, 0)), + Game(cro, nig, datetime(2018, 6, 16, 19, 0), + ascore=2, bscore=2), Game(arg, cro, datetime(2018, 6, 21, 18, 0)), From 358ad2c9446a2b951207731aea6c223cf92da91b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 7 Dec 2017 16:46:06 -0400 Subject: [PATCH 197/642] priors?? for crc ser bra swi --- karmapi/wc.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index b112753..3edd5df 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -550,8 +550,11 @@ class Sochi(Place): e=Group(teams = [bra, swi, crc, ser], games = [ - Game(crc, ser, datetime(2018, 6, 17, 12, 0)), - Game(bra, swi, datetime(2018, 6, 17, 18, 0)), + Game(crc, ser, datetime(2018, 6, 17, 12, 0), + ascore=2, bscore=2), + + Game(bra, swi, datetime(2018, 6, 17, 18, 0) + ascore=3, bscore=1), Game(bra, crc, datetime(2018, 6, 22, 12, 0)), From 5f14ab790a349d3e5720e9e5d805a0cc7c4395df Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 9 Dec 2017 17:57:52 -0400 Subject: [PATCH 198/642] more world cup simulation scores --- karmapi/wc.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 3edd5df..42a81c2 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -551,10 +551,10 @@ class Sochi(Place): games = [ Game(crc, ser, datetime(2018, 6, 17, 12, 0), - ascore=2, bscore=2), + ascore=2, bscore=4), Game(bra, swi, datetime(2018, 6, 17, 18, 0) - ascore=3, bscore=1), + ascore=3, bscore=3), Game(bra, crc, datetime(2018, 6, 22, 12, 0)), @@ -567,9 +567,11 @@ class Sochi(Place): f=Group(teams = [ger, swe, mex, sko], games = [ - Game(ger, mex, datetime(2018, 6, 17, 15, 0)), + Game(ger, mex, datetime(2018, 6, 17, 15, 0), + ascore=1, bscore=2), - Game(swe, sko, datetime(2018, 6, 18, 12, 0)), + Game(swe, sko, datetime(2018, 6, 18, 12, 0), + ascore=3, bscore=2), Game(sko, mex, datetime(2018, 6, 23, 15, 0)), @@ -597,8 +599,11 @@ class Sochi(Place): h=Group(teams = [pol, sen, col, jap], games = [ - Game(col, jap, datetime(2018, 6, 19, 12, 0)), - Game(pol, sen, datetime(2018, 6, 19, 15, 0)), + Game(col, jap, datetime(2018, 6, 19, 12, 0), + ascore=3, bscore=2), + + Game(pol, sen, datetime(2018, 6, 19, 15, 0), + ascore=3, bscore=2), Game(jap, sen, datetime(2018, 6, 24, 15, 0)), From 5bf0cfbe47eb413cf4821195bcdf44ba388c3ca3 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 9 Dec 2017 17:58:32 -0400 Subject: [PATCH 199/642] another look at filly maria et al --- karmapi/filly.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karmapi/filly.py b/karmapi/filly.py index 58260ae..2f0de11 100644 --- a/karmapi/filly.py +++ b/karmapi/filly.py @@ -327,7 +327,7 @@ def score(self): Events = dict( harvey = Event('harvey', 100, 0.2), irma = Event('irma', 100, 0.2), - maria = Event('ma,ria', 80, 0.5), + maria = Event('maria', 80, 0.5), jose = Event('jose', 1, 0.3), katia = Event('katia', 1, 0.3), nate = Event('nate', 1, 0.5), From 5285f8db2692a796ffec8eafdec0dc45dd783bc0 Mon Sep 17 00:00:00 2001 From: raspberry pi Date: Sun, 10 Dec 2017 00:02:15 +0000 Subject: [PATCH 200/642] add requests to requirements --- requirements.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/requirements.txt b/requirements.txt index 81c5681..5ead185 100644 --- a/requirements.txt +++ b/requirements.txt @@ -19,3 +19,7 @@ Pillow # pillow for PIL for images pytest # to run the test(s) hypothesis # needed to make writing tests fun + +requests # seems to be miss + + From d6bc582223a04bf34fff3bf85448ba552ab70459 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 10 Dec 2017 09:01:15 -0400 Subject: [PATCH 201/642] mind the gap --- karmapi/filly.py | 1 + 1 file changed, 1 insertion(+) diff --git a/karmapi/filly.py b/karmapi/filly.py index 2f0de11..ba27701 100644 --- a/karmapi/filly.py +++ b/karmapi/filly.py @@ -340,6 +340,7 @@ def score(self): # So numbers for orgs should be roughly in line # compare to other losses... note no Maria? bdaharirm = Event("Bermuda Harvey Irma", 120, 1.0), + minthegap = Event("igul - cgul", 20, 1.0), ) MoreEvents = dict( From 6ffce6b5b4820f7a01b898edf376dd1d49ea3a33 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 10 Dec 2017 09:05:25 -0400 Subject: [PATCH 202/642] finish wc first round simulation --- karmapi/wc.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 42a81c2..a12fd6e 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -553,7 +553,7 @@ class Sochi(Place): Game(crc, ser, datetime(2018, 6, 17, 12, 0), ascore=2, bscore=4), - Game(bra, swi, datetime(2018, 6, 17, 18, 0) + Game(bra, swi, datetime(2018, 6, 17, 18, 0), ascore=3, bscore=3), @@ -584,8 +584,11 @@ class Sochi(Place): g=Group(teams = [bel, pan, tun, eng], games = [ - Game(bel, pan, datetime(2018, 6, 18, 15, 0), ascore=3, bscore=1), - Game(tun, eng, datetime(2018, 6, 18, 18, 0), ascore=0, bscore=0), + Game(bel, pan, datetime(2018, 6, 18, 15, 0), + ascore=3, bscore=1), + + Game(tun, eng, datetime(2018, 6, 18, 18, 0), + ascore=0, bscore=0), Game(bel, tun, datetime(2018, 6, 23, 12, 0)), @@ -600,7 +603,7 @@ class Sochi(Place): games = [ Game(col, jap, datetime(2018, 6, 19, 12, 0), - ascore=3, bscore=2), + ascore=2, bscore=1), Game(pol, sen, datetime(2018, 6, 19, 15, 0), ascore=3, bscore=2), From 467650a56cb4adbcbe6e5be866e990cbce724280 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 29 Dec 2017 22:17:03 -0400 Subject: [PATCH 203/642] fred and the universe --- docs/nodice/fred.rst | 47 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 docs/nodice/fred.rst diff --git a/docs/nodice/fred.rst b/docs/nodice/fred.rst new file mode 100644 index 0000000..aa409de --- /dev/null +++ b/docs/nodice/fred.rst @@ -0,0 +1,47 @@ +======================================== + Fred Hoyle: The Nature of the Universe +======================================== + +I just changed coordinates. + +New location good, but temperature has been multiplied by minus one. + +Green turned to white, with crystal stalagtites. + +Found a box of books out of storage. + +And amongst them, Fred Hoyle. + +Mum mentioned him. Grew up in Bingley. + +Guess maybe Myrtle Park school? + +3 shillings and sixpence. + +But bought for 20 pence. + +Published in 1960, a new edition of 1950 orginal. + +125 pages and 4 plates of magic. + +Earth and nearby space +====================== + +The Sun and the stars +===================== + +Origin of the stars +=================== + +Origin of the earth and the planets +=================================== + +Expanding Universe? +=================== + +A Personal view of all the things they say +========================================== + +Hyrdrogen soup. + +Magnetic springs. From c505c60775b8afc99cf016934b0bb4c3742c23e8 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 6 Jan 2018 17:20:04 -0500 Subject: [PATCH 204/642] how to build a universe, yours for 20p --- docs/nodice/fred.rst | 48 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/docs/nodice/fred.rst b/docs/nodice/fred.rst index aa409de..bb54656 100644 --- a/docs/nodice/fred.rst +++ b/docs/nodice/fred.rst @@ -12,36 +12,76 @@ Found a box of books out of storage. And amongst them, Fred Hoyle. -Mum mentioned him. Grew up in Bingley. +Mum mentioned him. He grew up in Bingley, Yorkshire. Guess maybe Myrtle Park school? -3 shillings and sixpence. +The book follows a series of lectures Hoyle gave at Cambridge, +around 1950. -But bought for 20 pence. +The first edition was published in 1960 with a July 1959 preface that +states that it has been revised where recent astronomical work makes +it necessary to do so. The chapter dealing with the origin of the +planets has been completely re-written. -Published in 1960, a new edition of 1950 orginal. +The book was 3 shillings and sixpence. + +But is marked 20 pence, so from a second hand book store some time +since 1970. 125 pages and 4 plates of magic. +My guess is dad bought it some time since decimalisation. + +And then I found it one visit home and started reading it (2003 -- +there was a receipt from that date in the book). + +I had put Colin Rourke's, A new paradigm on the Universe on my +Christmas book list. Actually, I inserted it into my partner's book +list in the hope someone might accidentally get it her. + +So meanwhile, it has been fascinating to wind back a lifetime, to a +book published before I was born. + +It is a stunning account of how the nature of the universe. + Earth and nearby space ====================== The Sun and the stars ===================== +and the hydrogen bomb. + Origin of the stars =================== Origin of the earth and the planets =================================== +Speed of rotation of the sun. + +Key role of magnetism. + Expanding Universe? =================== +Expanding and constantly generating new atoms. + +It should note that whilst Hoyle talked of an expanding universe, +nothing in his arguments involved a big bang. + +Rather, he sets the scene with clouds of hydrogen soup. + A Personal view of all the things they say ========================================== Hyrdrogen soup. Magnetic springs. + +Balls + +Rotation + +Spiral galaxies From 03343363e6ce6b97e5417ea0194b964c9e8639f6 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 7 Jan 2018 19:19:42 -0500 Subject: [PATCH 205/642] start a filly on a chain race? --- karmapi/filly.py | 51 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/karmapi/filly.py b/karmapi/filly.py index ba27701..5ceba61 100644 --- a/karmapi/filly.py +++ b/karmapi/filly.py @@ -162,6 +162,7 @@ from math import pi import random +import argparse from datetime import date from collections import defaultdict, deque @@ -364,6 +365,39 @@ def score(self): # factor to apply to premium to get reinsurance loss MAGIC = 0.001 +def race(hash, codehash=None, seed=None): + """ filly on a chain race + + """ + + # do something useful + + # add the time, the seed and the code hash + + # save the results + + # checksum all of this and the incoming hash + + # are we done aka did I win aka small checksum? + + # declare game over + + # aggregate saved results + + # checksum all of this + + # pass it on + + # do deltas + + # when deltas have enough leading zeroes + + # declare winner + + # rinse and repeat + pass + + if __name__ == '__main__': events16 = {} @@ -405,4 +439,19 @@ def score(self): # Compare to reports for report in Reports: pass - + + + parser = argparse.ArgumentParser() + + parser.add_argument('--seed') + parser.add_argument('--hash') + parser.add_argument('--codehash') + + args = parser.parse_args() + + + seed = args.seed + hush = args.hash + codehush = args.codehash + + race(hush, seed=seed, codehash=codehush) From 3f3e533edf058a668166e891d13e106c49a47f1e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 16 Jan 2018 14:51:08 -0500 Subject: [PATCH 206/642] expanding thoughts on fred's universe --- docs/nodice/fred.rst | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/docs/nodice/fred.rst b/docs/nodice/fred.rst index bb54656..9440d82 100644 --- a/docs/nodice/fred.rst +++ b/docs/nodice/fred.rst @@ -40,18 +40,28 @@ I had put Colin Rourke's, A new paradigm on the Universe on my Christmas book list. Actually, I inserted it into my partner's book list in the hope someone might accidentally get it her. -So meanwhile, it has been fascinating to wind back a lifetime, to a +But no luck. So a copy may now be in the post. + +The timing of the find of Fred Hoyle's book could not have been +better. + +It has been fascinating to wind back a lifetime, to a book published before I was born. It is a stunning account of how the nature of the universe. +There are just 5 chapters, around 20 pages each. + Earth and nearby space ====================== The Sun and the stars ===================== -and the hydrogen bomb. +How are star works. + +and its relation to the hydrogen bomb. + Origin of the stars =================== @@ -63,6 +73,10 @@ Speed of rotation of the sun. Key role of magnetism. +Conservation of angular momentum. + +Magnetic clock springs. + Expanding Universe? =================== @@ -85,3 +99,5 @@ Balls Rotation Spiral galaxies + +Rotating gravitational fields. From c6006cfef72f71745063c8bc2cbd20fdc809f9ea Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 21 Jan 2018 14:26:12 -0500 Subject: [PATCH 207/642] software and pottery --- docs/pots.rst | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 docs/pots.rst diff --git a/docs/pots.rst b/docs/pots.rst new file mode 100644 index 0000000..177f0a7 --- /dev/null +++ b/docs/pots.rst @@ -0,0 +1,42 @@ +=========== + Soft Pots +=========== + +Pots +==== + +Software is malleable, just like clay. + +Start out with an idea, a magic pot, something to make from clay. + +Start doing what you think might get you there. + +Learn clay doesn't work that way. + +Or it does until it gets hot in the kiln. + +Along the way you notice a bunch of other cool things about clay. + +And your magic pot vision changes + +Since you now have new tricks in the tool kit. + +An artist with tools of many colours. + +Software +======== + +Someone else is has a very specific design for a pot they want you to build. + +They do not care that you can build something a 100 times better than their +design in lots of dimensions much more easily than you can build the +object of their desire. + +They also say what tools you can use to build the pot. + +And the pot must be fired in their kiln + +which is heated by a fire breathing dragon + +which randomly kicks the kiln around like a football or tosses it in +the air, breathes fire on it then heads it to the ground. From 93b04beaefef0975464e741c80ef3a1e5efb4156 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 21 Jan 2018 15:26:24 -0500 Subject: [PATCH 208/642] free soft clay ware pots --- docs/pots.rst | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/docs/pots.rst b/docs/pots.rst index 177f0a7..df6b1a1 100644 --- a/docs/pots.rst +++ b/docs/pots.rst @@ -40,3 +40,39 @@ which is heated by a fire breathing dragon which randomly kicks the kiln around like a football or tosses it in the air, breathes fire on it then heads it to the ground. + +Free Software Pots +================== + +Artisan software. + +Someone follows their own ideas. + +Finds something interesting. + +Offers it to others, who can each take their own path. + +Or like a band of artists weave rhythms and themes. + +Each with their own dance but creating ripples + +And waves to the future + +With a commit log story + +Of how we got here. + +With hints at the paths that might have been taken + +An infinite tree of exploration. + +Sharing the general. + +Generalising until all that differs is data + +And any good Turing complete will do. + + +Open data pots +============== + From bcd1e75097589fc1750cb9449769fb770d629386 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 22 Jan 2018 13:26:37 -0500 Subject: [PATCH 209/642] make swfiua version the official release --- setup.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/setup.py b/setup.py index 369503a..65ddeea 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from codecs import open from os import path -__version__ = '0.7.6.5.4.3.2.1' +__version__ = '0.8.7.6.5.4.3.2.1' here = path.abspath(path.dirname(__file__)) @@ -22,13 +22,13 @@ version=__version__, description='Data with karma and pi', long_description=long_description, - url='https://github.com/openbermuda/karmapi', - download_url='https://github.com/openbermuda/karmapi/tarball/' + __version__, + url='https://github.com/swfiua/karmapi', + download_url='https://github.com/swfiua/karmapi/tarball/' + __version__, license='GPL v 3', classifiers = [ 'Development Status :: 3 - Alpha', - 'Intended Audience :: End Users/Desktop', - 'Programming Language :: Python :: 3.6.1', + 'Intended Audience :: Science/Research', + 'Programming Language :: Python :: 3.6', ], entry_points = { 'console_scripts': [ From d25aaee415b1f7e5df169134a45b268e446dbd0b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 22 Jan 2018 13:48:52 -0500 Subject: [PATCH 210/642] bump release version --- setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 65ddeea..723f4ae 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from codecs import open from os import path -__version__ = '0.8.7.6.5.4.3.2.1' +__version__ = '0.9' here = path.abspath(path.dirname(__file__)) @@ -23,7 +23,7 @@ description='Data with karma and pi', long_description=long_description, url='https://github.com/swfiua/karmapi', - download_url='https://github.com/swfiua/karmapi/tarball/' + __version__, + #download_url='https://github.com/swfiua/karmapi/tarball/' + __version__, license='GPL v 3', classifiers = [ 'Development Status :: 3 - Alpha', From 76953a7f0ee5d7e1fcf997d353f0860498f41bda Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 22 Jan 2018 13:52:50 -0500 Subject: [PATCH 211/642] bump release version --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 723f4ae..fec45f7 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from codecs import open from os import path -__version__ = '0.9' +__version__ = '0.9.1.0' here = path.abspath(path.dirname(__file__)) From 5df09ad5623017a30acc972582857ccd63a8d9ba Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 23 Jan 2018 16:48:40 -0500 Subject: [PATCH 212/642] start view on all the things they say --- docs/nodice/fred.rst | 78 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 72 insertions(+), 6 deletions(-) diff --git a/docs/nodice/fred.rst b/docs/nodice/fred.rst index 9440d82..68ec908 100644 --- a/docs/nodice/fred.rst +++ b/docs/nodice/fred.rst @@ -90,14 +90,80 @@ Rather, he sets the scene with clouds of hydrogen soup. A Personal view of all the things they say ========================================== -Hyrdrogen soup. +The book ends with Fred giving his personal view at the time. -Magnetic springs. +On a back page, someone has written "of all the things they say". -Balls +So here is a personal view of all the things I may have heard. -Rotation +It is now 2018, 68 years since the first edition. + +We have computers the power of a Cray XMP in our pockets. + +And images of the stars from 13 billion light years away. + +And LIGO detectors that show gravitational waves exist. + +Black holes colide and out go the waves. + +Gravitational waves +------------------- + + + +Expansion and big bangs +----------------------- + +red shift. + +more than one way to shift red. + +At the time of the book, it was difficult to see beyond our own spiral +galaxy. Powerful telescopes were a very new thing. + +Within that galaxy the red shift of light appears to be a good indicator of +distance. + +This also appears to give a *coherent* view of the universe out to the +13B light year range currently observable. + +As Colin Rourke observes [1] a rapidly spinning black hole at the +centre of a galaxy can result in a red shift of light from the spiral +galaxy of stars surrounding that black hole. + +I believe that this can be shown to be the case. + + + +Self and circular reference +--------------------------- + +Cosmology, theoretical physics, mathematics and computer codes can all +very quickly become "self-referencial". + +Following a train of thought and going round in circles. + +Cosmology is a bit like mathematics. You have to make some +assumptions and see where it leads. + +If the assumptions make good predictions, then it may be a good +theory. + +But don't forget the assumptions, you may have new observations to +refine those assumptions. + + + +Hyrdrogen soup +-------------- + + +Magnetic springs +---------------- + +Balls, Rotation, Spiral galaxies +-------------------------------- + +*Rotating gravitational fields* -Spiral galaxies -Rotating gravitational fields. From 7457bd531129d9f2e8933dfea1c4a47e67b677df Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 29 Jan 2018 21:18:05 -0500 Subject: [PATCH 213/642] an np for tu? --- docs/nodice/anpotu.rst | 10 ++++++++++ docs/nodice/fred.rst | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 docs/nodice/anpotu.rst diff --git a/docs/nodice/anpotu.rst b/docs/nodice/anpotu.rst new file mode 100644 index 0000000..8f2c3d8 --- /dev/null +++ b/docs/nodice/anpotu.rst @@ -0,0 +1,10 @@ +================================== + An New Paradigm for the Universe +================================== + +Colin Rourke +October 2017 + +http://msp.warwick.ac.uk/~pr + + diff --git a/docs/nodice/fred.rst b/docs/nodice/fred.rst index 68ec908..e4064ad 100644 --- a/docs/nodice/fred.rst +++ b/docs/nodice/fred.rst @@ -152,11 +152,23 @@ theory. But don't forget the assumptions, you may have new observations to refine those assumptions. +Where to begin can be a problem. + +How about stars condensing out of hydrogen clouds? Hyrdrogen soup -------------- +Imagine you are in a part of the universe where virtually all the +matter is hydrogen. + +Sphere of frozen hydrogen. + +Rotation? + + + Magnetic springs ---------------- @@ -167,3 +179,9 @@ Balls, Rotation, Spiral galaxies *Rotating gravitational fields* +Rotation +======== + +And with that thought it is fast forward to Colin Rourke, A new +paradigm for the universe. + From 30fa153ff7af1a72517068adcc9bdcbcb8b4ed2a Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 29 Jan 2018 23:34:52 -0500 Subject: [PATCH 214/642] no big bang theory? --- docs/nodice/anpotu.rst | 111 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) diff --git a/docs/nodice/anpotu.rst b/docs/nodice/anpotu.rst index 8f2c3d8..1b734c2 100644 --- a/docs/nodice/anpotu.rst +++ b/docs/nodice/anpotu.rst @@ -7,4 +7,115 @@ October 2017 http://msp.warwick.ac.uk/~pr +This arrived just as I was finishing Fred Hoyle's book. + +I had read, or rather skimmed, a pdf of the book a couple of months back. + +I'm now up to chapter 4. From what I recall from the pdf things are +downhill but full of delights from here. + +The introduction sets out the plan. Sciama spaces, Mach principles +and all sorts of weirdness. + +I struggled a fair bit with chapters 2 and 3. + +But it is all leading to an idea: an inertial drag generated by +rotating masses that drops off with distance r. + +If you add that to Einstein's general relativity then the spiral +galaxy velocity curves we see are almost inevitable. + +There are other important claims in the book. + +It is only a matter of time before someone writes a headline:: + + No big bang theory! + +What Colin provides is a model that explains why galaxies look the way +they do. + +Some features: + +* no need for dark matter. + +* the universe could be many orders of magnitude older than the + current 13 billion year estimate. + +* this estimate is based on how long a spiral galaxy may be able to + sustain itself. + +The big bang is predicated on the assumption that because the universe +appears to be expanding and extrapolating backwads. + +But expansion is more complex than you might think. + +The argument is that there is more than one way to make light shift +red. + +In particular, inertial drag from an nearby, fast rotating black +hole. + + + + +A personal view of all the things they say +========================================== + +Angular momentum. Mass. Velocity. + +Gravity waves. + +According to this model, our sun formed in the star forming region +near the black hole at the centre of our spiral. + +??? how old is the sun + +We just happen to be living in a long stable period. How long has it +been beating? + +My personal view is that our visible universe, and likely much of the +invisible, the latter likely vastly larger, at some point involved a +collision between giant black holes. + +So it is useful to consider what happens when such collisions happen. + +What do the gravitational fields look like emerging from the hole? + +A twisting of the baryon space which we are part of. + +A quasi infinite array of twisting spirals dancing the strings of time. + +The quantum field, the rhythm of life. + + + + +Longer term +----------- + + +One thing that is quite clear here is we can build very much better +models for key parts of our solar system: the very same computer +models can be used at each level. + +Indeed, it is possible to simulate a world where we divide our +universe of interest into nested shells. You just throttle the +information flow between shells, hopefully no throttling is necessary. + +Now in our current world we have many experts who can help refine +models for each shell. + + + +Footnote +======== + +I just put down the thoughts down, before I go on to the further +chapters. + +As I have already read the next bit once I suspect much of what I +wrote above is what I picked up on the first read, or things that +Colin is well aware of but a diversion from the subject of the book. + + From 2ef89bec27e5d8b471f2611271930ff9e05e7d48 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 31 Jan 2018 20:42:14 -0500 Subject: [PATCH 215/642] url fixes --- docs/nodice/anpotu.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/nodice/anpotu.rst b/docs/nodice/anpotu.rst index 1b734c2..d854243 100644 --- a/docs/nodice/anpotu.rst +++ b/docs/nodice/anpotu.rst @@ -5,7 +5,9 @@ Colin Rourke October 2017 -http://msp.warwick.ac.uk/~pr +http://msp.warwick.ac.uk/~cpr + +https://arxiv.org/abs/astro-ph/0311033 This arrived just as I was finishing Fred Hoyle's book. From f45f9927c73d5147fa599167a672344119e9193d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 5 Feb 2018 18:12:33 -0500 Subject: [PATCH 216/642] colin 2 turning into py caribbean talk? --- docs/nodice/colin2.rst | 152 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) diff --git a/docs/nodice/colin2.rst b/docs/nodice/colin2.rst index 45d6d8e..f814fa9 100644 --- a/docs/nodice/colin2.rst +++ b/docs/nodice/colin2.rst @@ -66,3 +66,155 @@ Waves ===== Energy mass and rotation. + + +Of all the things they say +========================== + +Good to be able to speak to someone who has better insights than I do. + +Time and space: all relative + +I tend to look at it after factoring out local matter from the +geometry. + +At least some of the time. + +Cosmology has always intrigued me. So easy to get into a circular +argument and not even know you are there. + +Rather you are off on a spiral of promise. + +Giant black holes at the centres of galaxies. + +I remember being at school, maybe 7 years old. Probably the same +class room Fred Hoyle once sat in. + +Someone mentioned black holes were a thing. No this wasn't Star +Trek. + +Well yes.. like on star trek, but real. + +So over the years, dark matter has appeared. Or rather hasn't. + +Now since galaxies seem to be rather homogeneously distributed about +our visible universe it would seem you can place as much matter as you +like in the centres of those galaxes, at least within a couple of +orders of magnitude in some units. + +(now we are going round in circles). + +I am thinking about my talk for Py Caribbean. + +I need to get it sorted so I can start practicing. + +The title is: + +The tankrain karma pi rongo rongo show +====================================== + +:: + + A talk about natural cats of all sorts. + + The wonders of the universe + + The world of python and pi + + Gravity and lightness + + Moai and madness + + The rongo rongo way. + +Now I understand if you hesitate to be associated with this. + +Tankrain +-------- + +is a few lines of python code I use to view images. + +Its great for photos, presentations and viewing plots from +simulations. + +Or climate data plotted on a grid (note to self use molleweide??) + +If you can model the water on earth you really have the climate and +weather within your model. + +This water is in liquid, ice and water vapour form. Along with other +gases in the atmosphere. + +An inner core, solid earth with rotating inner molten core. + +Water and ice on land and in the atmosphere. + +Shells as the radius of the sphere increases. + +A hurricane is powered by the difference in temperature between the +hot ocean and the cold upper atmosphere. + +A flow of moist warm air heads upwards, cooler air sucked in. + +A daily bathing of sunlight overhead. + +And tides and waves driving the ocean. + +Dragged away from the equatorial plane, drag increasing as you move north. + +karma pi +-------- + +This is where I experiment with ideas and bits of python code. + +Mostly I end up with too much to think about before I do too much +damage and write actual code. + +But there are a lot of pieces that can be used to fit models to data +and then simulate futures (and pasts, as we know, time and all that). + +And provide insights. + +The good news is the code is extremely general. + +Most modules can be read on their own and only really require ability +to read python. + +As my ideas get more solid, so will the code. + +rongo rongo +----------- + +Round and round we go. + + +Python +------ + +Happy Birthday! 27? + +Gravity +------- + +LIGO: 2-3 years + +As soon as it was sensitive enough to do so, this detector found what +it was designed to find. + +Anyne got updates from this and other gravity wave projects? + +Note that this observation suggests such events are common place. + +This is no doubt consistent with the theory that galaxies can be +extremely long lived. + +Presumably in time the LIGO experiment (and related efforts) will +confirm the homogeneity (or not) of space time. + +I would expect to see interesting correlations with the cosmic +microwave background. + + + + + From 8ad97fde349c6d99ecf6b56bc541b851fb9bab39 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 5 Feb 2018 20:13:46 -0500 Subject: [PATCH 217/642] round and round in rongo rongo land --- docs/nodice/colin2.rst | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/docs/nodice/colin2.rst b/docs/nodice/colin2.rst index f814fa9..ac1f990 100644 --- a/docs/nodice/colin2.rst +++ b/docs/nodice/colin2.rst @@ -186,7 +186,39 @@ rongo rongo ----------- Round and round we go. + +Rongo Rongo is the name given to an ancient script written by the Rapa +Nui people who inhabited the island of the same name, now Easter +Island or Isla de Pascua. + +It is famous for the magnificent Moai, giant statues carved out of +volcanic rocks. + +The distribution of Moai about the island is fascinating. + +The people said they walked on their own, using the power of mana. + +*moon.py* is the beginnings of some code to simulate the gravitational +and magnetic fields of the island. + +How strong would the magnetic field need to be to allow the Moai to +wobble as pendulums, driven by the moon and the stars? + +The code is intended to be entirely general, so could equally be used +to simulate the forces of gravity and magnetism in a spiral galaxy. +Or rather it could be, once I finish writing it. + +And rongo rongo? + +Well the text goes round and round. Two spirals of mystic figures, +meeting in the centre, or starting there and moving out, in a dance as +the Moai walk by the ahu by the shore. + +By the time the tablets were noticed, all the wise who could read were +gone, but we are told they were chants, but what do people chant? + +And why does everything go round and round in rapa nui? Python ------ @@ -215,6 +247,3 @@ I would expect to see interesting correlations with the cosmic microwave background. - - - From c65b0000c27dbabde110bf7b0e872f77178c5c35 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 5 Feb 2018 21:25:09 -0500 Subject: [PATCH 218/642] importing pictures oh no.. date time parsing --- karmapi/pixin.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 karmapi/pixin.py diff --git a/karmapi/pixin.py b/karmapi/pixin.py new file mode 100644 index 0000000..fa63110 --- /dev/null +++ b/karmapi/pixin.py @@ -0,0 +1,42 @@ +""" +Quick and dirty move some pictures around. + +Usual stuff guess year/month/day from file name, move accordingly + +Cross fingers +""" + +import argparse + +from pathlib import Path + +def warp(when, what, dest): + + return dest / f'{when.year}/{when.month}/when.day}' / what + +def parse(item): + """ Oh no.. date parsing time """ + + return None, None + + +if __name__ == '__main__': + + parser = argparse.ArgumentParser() + + parser.add_argument('-folder', default='.') + + args = parser.parse_args() + + items = Path(args.folder) + + for item in items.glob('*'): + + when, what = parse(item) + + if when and what: + + where = warp(when, what, dest) + + if where: + shutil.copyfile(what, where) From f5b62fc37d58d3f4b6b5ffb0363ed003b0e8173b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 8 Feb 2018 14:42:37 -0500 Subject: [PATCH 219/642] pixel picture importer sort of working maybe --- karmapi/pixin.py | 45 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/karmapi/pixin.py b/karmapi/pixin.py index fa63110..59991f0 100644 --- a/karmapi/pixin.py +++ b/karmapi/pixin.py @@ -5,38 +5,69 @@ Cross fingers """ - +import datetime import argparse +import shutil from pathlib import Path -def warp(when, what, dest): +def warp(dest, when): + + folder = dest / str(when.year) / str(when.month) / str(when.day) - return dest / f'{when.year}/{when.month}/when.day}' / what + return folder / f'{when.hour}{when.minute}{when.second}' def parse(item): """ Oh no.. date parsing time """ - - return None, None - + print(item) + pitem = Path(item) + #for x in dir(pitem): + # print(x) + when = pparse(pitem) + + return when, pitem + +def pparse(pitem): + """ Convert path into date time """ + fields = pitem.stem.split('_') + name, day, second = fields[:3] + + year = int(day[:4]) + month = int(day[4:6]) + day = int(day[6:]) + print(year, month, day) + + hour = int(second[:2]) + minute = int(second[2:4]) + second = int(second[4:]) + + when = datetime.datetime(year, month, day, hour, minute, second) + print(when) + return when if __name__ == '__main__': parser = argparse.ArgumentParser() + parser.add_argument('dest') + parser.add_argument('-folder', default='.') args = parser.parse_args() items = Path(args.folder) + dest = Path(args.dest) + for item in items.glob('*'): when, what = parse(item) if when and what: - where = warp(when, what, dest) + where = warp(dest, when).with_suffix(what.suffix) if where: + where.parent.mkdir(exist_ok=True, parents=True) + print(what, where) shutil.copyfile(what, where) From 7a8818ff506e913fd56ee53d45f3b39d520259c1 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 16 Feb 2018 17:25:50 -0500 Subject: [PATCH 220/642] tankrain pause tinkering --- karmapi/tankrain.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index 0ecec3f..5d955ae 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -2,6 +2,7 @@ """ import itertools import argparse +import random import datetime utcnow = datetime.datetime.utcnow @@ -38,6 +39,7 @@ def __init__(self, parent, path=None, version='local', date=None, *args): self.paused = False self.path = path or '~/karmapi/tankrain' self.timewarp = 0 + self.cut = 0 self.date = date if self.date is None: self.date = utcnow() @@ -75,9 +77,10 @@ def compute_data(self): rainbow = [x for x in range(100)] im = [rainbow] * 100 + n = len(self.paths) ix = ix + self.inc - if ix >= len(self.paths): - ix = 0 + if ix >= n: + ix = self.cut if ix < 0: ix = len(self.paths) - 1 @@ -121,16 +124,21 @@ async def next_view(self): async def previous_day(self): """ previous day """ self.timewarp -= 24 * 3600 - - self.load_images() + self.set_for_day() async def next_day(self): """ next day """ self.timewarp += 24 * 3600 + self.set_for_day() + + def set_for_day(self): + self.paused = False + self.cut = 0 self.load_images() async def reverse(self): """ Rongo Rongo change direction """ + self.paused = False self.inc *= -1 async def pause(self): @@ -140,12 +148,16 @@ async def pause(self): async def fewer_images(self): """ Skip some images """ self.inc = int(self.inc * 2) + self.cut = self.ix % abs(self.inc) + async def more_images(self): """ Show more images """ if abs(self.inc) > 1: self.inc = int(self.inc / 2) + self.cut = self.ix % abs(self.inc) + async def start(self): """ FIXME: get yoser to run fetch """ #farm.yosser.run(fetch, minutes=20, sleep=300) From 9b8efe2ebe3d64de3466a8acf108d2dad17187ee Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 18 Feb 2018 14:32:01 -0500 Subject: [PATCH 221/642] hrmm half baked thoughts --- docs/nodice/hrmm.rst | 55 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 docs/nodice/hrmm.rst diff --git a/docs/nodice/hrmm.rst b/docs/nodice/hrmm.rst new file mode 100644 index 0000000..d419f0a --- /dev/null +++ b/docs/nodice/hrmm.rst @@ -0,0 +1,55 @@ +===================================== + Hoyle Rourke MacKay Mulligan and Me +===================================== + +Everyone needs a Mulligan. + +You make a mistake. Bad things happen. + +Its the ones where if you had not been there it might have been +different. + +But you try something and it is not until you try it you discover if +it works or not. + +Now cosmology is a fascinating subject with wonderful history and more +wonders beyond our brief written window. + +We are living at a time when our view, outwards and inwards has been +increasing dramatically in resolution. + +This also happening at a time when .. + +Reading Fred's book soon after I had skimmed a pdf of Colin's book was +fascinating. + + + +Hoyle +===== + + +Rourke +====== + + +MacKay +====== + +Others +====== + +MacKay, Eddington, Sciama, de Sitter, Schwartschild, Arp + + +Maths, Code and Language +======================== + +Expressing ideas. Models. Visualisation. + +Data +==== + +Information +=========== + From 658f5130a0e959a4ab63a18da9484d880948f4e0 Mon Sep 17 00:00:00 2001 From: Mary Salegio Date: Sun, 4 Mar 2018 18:37:30 -0500 Subject: [PATCH 222/642] make pyaudio optional for now --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 81c5681..53ae1c4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,7 +3,7 @@ ripl # for historical reasons matplotlib # jupyter should provide this.. maybe it doesn't pandas # this might provide matplotib -pyaudio # for sound +#pyaudio # for sound curio # for async magic blockchain # for trust and meta data exchange From 01febc5cce8b951c04daae63f3cb076bdcba2b31 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 5 Mar 2018 13:04:50 -0500 Subject: [PATCH 223/642] remove ripl dependency --- karmapi/backends/tkpig.py | 4 ++-- karmapi/piglet.py | 3 ++- requirements.txt | 1 - 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/karmapi/backends/tkpig.py b/karmapi/backends/tkpig.py index fc07113..24b7523 100644 --- a/karmapi/backends/tkpig.py +++ b/karmapi/backends/tkpig.py @@ -39,7 +39,7 @@ except: from pandas.io.formats.format import EngFormatter -from ripl import imagefind +from .finder import ImageFind from karmapi import base, yosser @@ -195,7 +195,7 @@ def recalc(self, width, height): def find_image(self, name): - return imagefind.interpret(dict(galleries=self.gallery, image=name)) + return ImageFind().interpret(dict(galleries=self.gallery, image=name)) class PillBox(Pig): diff --git a/karmapi/piglet.py b/karmapi/piglet.py index 6c95308..85c0797 100644 --- a/karmapi/piglet.py +++ b/karmapi/piglet.py @@ -506,7 +506,8 @@ class Image(PlotImage): def __init__(self, parent, image=None, title=None, galleries=None): - from ripl import imagefind + from .finder import ImageFind + imagefind = ImageFind() self.path = '/home/jng/devel/karmapi/docs/pycaribbean/princess_cricket.jpg' diff --git a/requirements.txt b/requirements.txt index 5ead185..c8c8d22 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,3 @@ -ripl # for historical reasons #jupyter for added goodness matplotlib # jupyter should provide this.. maybe it doesn't From 9a9cf4ef06b0d1175f24b2ddb2c7ea15a24ea145 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 5 Mar 2018 13:07:53 -0500 Subject: [PATCH 224/642] fix import --- karmapi/backends/tkpig.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karmapi/backends/tkpig.py b/karmapi/backends/tkpig.py index 24b7523..88b1f50 100644 --- a/karmapi/backends/tkpig.py +++ b/karmapi/backends/tkpig.py @@ -39,7 +39,7 @@ except: from pandas.io.formats.format import EngFormatter -from .finder import ImageFind +from karmapi.finder import ImageFind from karmapi import base, yosser From 9cf8859becb63b1e2fc286aad33439099e26ef57 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 5 Mar 2018 13:38:27 -0500 Subject: [PATCH 225/642] support pandas 0.19 and 0.20 --- karmapi/pigfarm.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/karmapi/pigfarm.py b/karmapi/pigfarm.py index 240bc03..534b1d6 100644 --- a/karmapi/pigfarm.py +++ b/karmapi/pigfarm.py @@ -7,6 +7,11 @@ """ import pandas # piglets and pandas together np = pandas.np +try: + + from pandas.core.indexes.datetimes import DatetimeIndex +except: + from pandas.tseries.index import DatetimeIndex from collections import deque import curio @@ -550,7 +555,7 @@ def process_data(self): if self.begin or self.end: frame = filter_frame(frame, self.begin, self.end) - if isinstance(frame.index, pandas.core.indexes.datetimes.DatetimeIndex): + if isinstance(frame.index, DatetimeIndex): sortflag = False frames[group] = dict(frame=frame, sort=sortflag) From 710b63cf04198e01db45452c2b3b804487af2efd Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 5 Mar 2018 18:11:05 -0500 Subject: [PATCH 226/642] of all the things they say... --- docs/nodice/oattts.rst | 79 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 docs/nodice/oattts.rst diff --git a/docs/nodice/oattts.rst b/docs/nodice/oattts.rst new file mode 100644 index 0000000..fbc560a --- /dev/null +++ b/docs/nodice/oattts.rst @@ -0,0 +1,79 @@ +============================ + Of All The Things They Say +============================ + +A personal view. + +Fred Hoyle, Colin Rourke, Douglas Adams and an army of others with guides to the universe. + +I am currently engrossed by Colin Rourke's, "A new paradigm for the +universe" (ANPOTA). + +Zeeman, causality implies the Lorenz group. I wish I had known about +this the day he drove me in from Leamington Spa. + +It has been a strange journey so far, full of coincidence or not. Or +maybe the journey is taking a path of high coincidence by choice? + +The mathematics in the book I have found challenging at times. It has +been a while since I read mathematics closely, wanting to understand +it all. + +I have learnt some new names: Sciama, de Sitter, Arp and some old +ones seen in new light: Mach, Einstein, Hoyle, Poincare. + +I am on my third or fourth pass through the book. Seven chapters and +seven appendices. + +For me a reasonable order to read has been: + +Introduction +============ + + + +Chapter 2 Sciama's Principle + + + +Chapter 6 Observations + +Chapter 7 Cosmology. + + +Chapters 3-5 are more math heavy, don't get bogged down there and miss +out on the joys of the final two chapters. + +The appendices are full of helpful and fascinating information. + +Appendices C, D and F are more observational + +Appendices A, B, E and G are more theoretical. + + +Of all the things they say +========================== + +What follows are personal thoughts on the universe, un-encumbered by +any sort of fact checking, just seeing where they lead. + +An approximation to the universe as described in ANPOTA is just to +ignore matter that is outside of the black holes at the centre of each +universe. + +Now this approximation is a bit too strict to be useful. Much of the +matter that is not in the form of black holes is nonetheless close to +a black hole cf matter in visible spiral galaxies. + +Now this matter acts as a gravitational lens to the field emanating +from its black hole centre. + +So, granted that may be an issue, but lets just see how things might +behave and then come back to the issue of surrounding matter. + +But first, what happens when a giant cloud of hydrogen is sent +spinning gently through a universe? + + + + From c84442be8521608bb5579f61f3c4eb0fa4664601 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 26 Mar 2018 20:55:39 -0400 Subject: [PATCH 227/642] not sure what this is --- docs/computers.rst | 202 ++++++++++++++++++++++++++++++++++++++ docs/nodice/oattts.rst | 3 +- karmapi/backends/tkpig.py | 4 - 3 files changed, 204 insertions(+), 5 deletions(-) create mode 100644 docs/computers.rst diff --git a/docs/computers.rst b/docs/computers.rst new file mode 100644 index 0000000..0a58a3f --- /dev/null +++ b/docs/computers.rst @@ -0,0 +1,202 @@ +============================================================ + How to give and get computer support from a complete twat* +============================================================ + +OK. You love each other, Uncle's Love Birds. + +And you do and how. + +And you are turning into each other and into your mum's and dad's. + +And siblings and others and more. + +So computers. Hate them or hate them? + +So here I am :: + + from math import e + from import datetime import datetime + + how_long = datetime.now().year() - 1985 + e + + print("%f how_long {}".years() + + +So there seem to be some problems in this area. + +So problem seems to be in the i/O module. + +There's a race condition on the input pipes. + +So you feed it a sliver of fish it zooms off into the distance +like Pyree the cat (btw he's cool about how you spell his name, so +fill your boots there) when a tiny scared kitten. + +And then retreats where it focusses entirely on elaborate plans for +the new morcel. + +Now where was I? + +OK. So small amount of input off it zooms. But it then starts +throwing out ideas like a robot on speed trying to learn how to throw +frisbees. + +And it seems to have a special focus throwing ideas at you? + +But it gets really weird when its focussing its eyes on computer +screens. + +And fingers on a keyboard. + +And then the ears shut down almost entirely. Now this is not to say +the ears were ever really working in the first place. + +btw why doesn't my guitar have a head shaped hole in it? And some +frantic scribbling about pi from america? + +I digress. The stack gets deeper and deeper. + +It may try to use you as sort of an auxillary stack. [I should get +Dave to implement a version of how all this works]. + +It's neat. It is some thing like:: + + from random import random + + from curio import UniversalQueue, sleep + + # one of these should come in handy: + uq = UniversalQueue() + + for lfi in latest_fine_idea_hosepipe(): + uq.push(lfi) + + while True: + lfi = lfi + latest_fine_idea_hosepipe() + lfi.enance_and_broadcast() + + if random.random() < epsilon: + sleep() + + if random.random() < p: + # take a short recording, listen to something + p_tape() + + +So basically, this is the frisbee flinging lfi's instead of actual +frisbees. If you have a robot and frisbees, stand well back. + +See back in 1985 I went on a 3 day introduction to Unix course at +an Arts and technology school. + +3 days in a different office do this new fangled unix stuff. + +Now the course was a mixture of weird adventure: file permissions, +seeing how the group thing did and didn't or did work. + +But then we spent about half aday learning this weird stuff called +emacs which required your nose attached to this weird control key on +this keyboard that was also weird. + +Lots of strangeness. But the thing I hated most was emacs. + +Until a couple of years later. Boom unix arrived in the form of Sun +workstations. Should check out the specs of the early machines. + +They seemed like magic. And had this thing called emacs. + +And I had a colleague who showed me how to do 3 cool tricks, told me +the best plan B was some goofy thing called vi and that anyway emacs +could emulate vi so what's the point? + +And I am still using emacs now. + +I can relax and type and mostly focus on what I am typing. + +Now we have git too. + +And it has taken time but commiting early and often seems to work well. + +Now there are two other tools that have stayed with me through the +years. + +bash +==== + +Bourne Again SHell. + +I think my first bash adventure may have been in Canada. It is a long +time ago. + +The man page, of course, if you want the best man for a job, you need +to do M-x woman whilst in emacs (you aren't running vi are you?) + + +vi +== + +If you are running vi then I hear vim is better than good. Mum always +reckoned Vim was good in the kitchen. Not to be confused with vimto, +which intriguingly is an anagram of vomit. + +So, as I said, if you are using vim (basically you have syntax +highlighting). + + +idle +==== + +Idle? No busy typling. + +Guido wrote IDLE and you can launch it with e for Eric from karmapi +gui's. + +Tankrain is the best. It is slow as molasses due to massive over +engineering that supports other stuff some of which works. + +Any I used Idle for a good while and when writing code I find it +changes the way I focus in ways I like. + +I still wonder if there are more adventures to come with Eric and +IDLE. + +What about Word? +================ + +Shivers + +Did someone say Antiword? +========================= + +:: + + antiword/artful 0.37-11 amd64 + Converts MS Word files to text, PS, PDF and XML + +An Irish connection too and lots of tales here. + +But most of all, why didn't I think of this sooner. + + +libre office +============ + + + +True love +========= + +gnumeric + +Matplotlib + +Whatever happened to.. +====================== + +Matplotlib plots embedded in gnumeric? + + +Did someone say webform? +======================== + +Leaves the room diff --git a/docs/nodice/oattts.rst b/docs/nodice/oattts.rst index fbc560a..6f4137c 100644 --- a/docs/nodice/oattts.rst +++ b/docs/nodice/oattts.rst @@ -4,7 +4,8 @@ A personal view. -Fred Hoyle, Colin Rourke, Douglas Adams and an army of others with guides to the universe. +Fred Hoyle, Colin Rourke, Douglas Adams and an army of others with +guides to the universe. I am currently engrossed by Colin Rourke's, "A new paradigm for the universe" (ANPOTA). diff --git a/karmapi/backends/tkpig.py b/karmapi/backends/tkpig.py index 88b1f50..442f0ad 100644 --- a/karmapi/backends/tkpig.py +++ b/karmapi/backends/tkpig.py @@ -23,9 +23,6 @@ from matplotlib.backends.backend_tkagg import FigureCanvas, FigureManager -from matplotlib.backends.backend_tkagg import ( - NavigationToolbar2TkAgg) - from matplotlib.backends import tkagg from matplotlib.figure import Figure @@ -291,7 +288,6 @@ def __init__(self, parent, axes=[111], dpi=100, **kwargs): self.image = FigureCanvas(fig, master=self) self.image._tkcanvas.pack(expand=1, fill=tkinter.BOTH) - #self.toolbar = NavigationToolbar2TkAgg(self.image, self) #self.toolbar.update() #self.toolbar.pack(expand=0) if axes is None: From d1dad26b26f42e706a93e0fa8a4e088c6769466d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 26 Mar 2018 21:12:43 -0400 Subject: [PATCH 228/642] true love --- docs/computers.rst | 80 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) diff --git a/docs/computers.rst b/docs/computers.rst index 0a58a3f..9c9547a 100644 --- a/docs/computers.rst +++ b/docs/computers.rst @@ -188,15 +188,93 @@ True love gnumeric -Matplotlib +python + +Matplotlib, Jupyter <3 00 <3 + +Eagle and Salmon, guiding each other. + +Watching and listening too. I'm up in the mountains, flying high +and the water is clearing from my ears. + +We have the music, just no CD player. + +And that's just cool for now. + +Because of four classic books and an infinite love. Whatever happened to.. ====================== Matplotlib plots embedded in gnumeric? +And python in gnumeric? + +And herein lies a cool thing... I could look and see what's there if +it were installed in a base Ubuntu system... checks:: + + It's not there :( + +If I had a web connection. Which I could, but actually enjoying it +not there for now, so one for another day. Did someone say webform? ======================== Leaves the room + +Tech paranoia +============= + +Much of life writing with software has been life with stuff that does +not yet do what is desired. + +When you find a great tool stick with it, you may not need much more. + +Hence: + + * Excel + + * Word + + * Powerpoing + + * ripl, tankrain or just PIL + feh or gqview or .... + +But, whatabout? +=============== + +Yes, there is no shortage of fantastic tools. And that is good. + +So what's the problem? +====================== + +Languages. + + +But what about Machine Learning and Block Chain? +================================================ + +There's an idea: un block chain, ubc. + +An we are back to C. + +Which is sort of how it all began. + +And pretty much every important problem was already solved by then, at +least theoretically. + +And now everyone has a Cray in their pocket. + +Or not quite everyone. + +And that can be a problem. + +And everyone who has one has to re-learn how to answer the phone every +time there is an upgrade. + +Oh and this one is a wonder to behold:: + + PLEASE DON'T + + REMOVE CARD From 9f49d3c5af50d16def7f8d1fa3dd5ee2aa9de7d5 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 26 Mar 2018 21:40:51 -0400 Subject: [PATCH 229/642] pyree protocol dont poke the moose --- docs/computers.rst | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/docs/computers.rst b/docs/computers.rst index 9c9547a..09f6330 100644 --- a/docs/computers.rst +++ b/docs/computers.rst @@ -278,3 +278,39 @@ Oh and this one is a wonder to behold:: PLEASE DON'T REMOVE CARD + + +Stress and using stuff that might explode +========================================= + +Aside:: + + import hypothesis + + # great talk, might have been lighning + + def test_does_it_explode(thing): + """ Prod it see what happens + + This is also known as the "pyree protocol" or prp for short. + + Pyree says it is pronounced perp as in walk. He's pretty + advanced speech wise for a one year old. Particularly when you + factor in he's really still a kitten. + + So protocol not advised in presense of moose. + + See also title of this piece, whatever it is. + """ + +OK. So this is actually a great test to have. + +Just checked karmapi. Oh, I did write some tests.... over to bash + +:: + + grep explod tests/test*.py + + +Hmm... no explode test yet. Maybe we need Eric? + From 72867cd1d502302bb36e67be07186cae76d08906 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 31 Mar 2018 20:28:55 -0400 Subject: [PATCH 230/642] easter update nine years less eleven days on --- docs/nodice/oattts.rst | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/docs/nodice/oattts.rst b/docs/nodice/oattts.rst index 6f4137c..c0cb88f 100644 --- a/docs/nodice/oattts.rst +++ b/docs/nodice/oattts.rst @@ -31,17 +31,12 @@ For me a reasonable order to read has been: Introduction ============ - - Chapter 2 Sciama's Principle - - Chapter 6 Observations Chapter 7 Cosmology. - Chapters 3-5 are more math heavy, don't get bogged down there and miss out on the joys of the final two chapters. @@ -75,6 +70,7 @@ behave and then come back to the issue of surrounding matter. But first, what happens when a giant cloud of hydrogen is sent spinning gently through a universe? +Easter Update +============= - - +see april1.rst From 8cf94bf538f9e2b859076c9d95cd2fa33200f3db Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 31 Mar 2018 20:30:16 -0400 Subject: [PATCH 231/642] easter fool letter to cr re anpotu --- docs/nodice/april1.rst | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 docs/nodice/april1.rst diff --git a/docs/nodice/april1.rst b/docs/nodice/april1.rst new file mode 100644 index 0000000..7479d8a --- /dev/null +++ b/docs/nodice/april1.rst @@ -0,0 +1,42 @@ +================================== + Who knew moving was complicated? +================================== + +It has been a while since I last wrote. + +In the meanwhile I have had a chance to go through the whole book in +some detail. + +I have a very good grasp of chapters 1-3 and much of 4 at this point. + +The more descriptive chapters: observations and cosmology are much +easier to follow, at least for me. + +A fascinating book. + +I dug out a pdf of Sciama's 1953 paper that you reference. + +inertial drag, does god play dice or is music inevitable? + +It is good to revisit this, indeed it perhaps should have been paid +more attention at the time. + +Or perhaps it was. There was a lot going on. + +My own thoughts are around the area of just how matter, will vibrate +in harmony with the surrounding vibrations in the universe. + +Indeed I think this is just how the mathematics actually +works, at least for certain \omega. + +At this point it would be invaluable to spend a few hours together if +we can resolve our own space/time coordinate issues. + +I think if one of us is dense enough and spins fast enough then +something might happen? + +I am happy to be the dense spinning bit for a while. + +All the best. + +Johnny From 263b6f649974e3010192f6191c5288d4a465083d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 1 Apr 2018 18:26:56 -0400 Subject: [PATCH 232/642] new hush hush carlisle sultana plan --- karmapi/hush.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/karmapi/hush.py b/karmapi/hush.py index 91f4725..3488499 100644 --- a/karmapi/hush.py +++ b/karmapi/hush.py @@ -21,6 +21,44 @@ https://github.com/tyiannak/pyAudioAnalysis + + +Update: back after a long absense. + + +OK. So I have some .wav files I want to process and use with the rest of the +karma that is here. + +But there are a lot of pieces to juggle around here. + +I want to use the tpot. + +Here's the idea. + +Take a poor quality recording of me playing the guitar and turn it into +something Carlos Santana might do while he's tying shoe laces. + +So I'm more Carlisle Sultana than Carlos, so this might take a while. + +Less ambitious goal? Beware if it sounds easy ... remember the black hole of +code. Did I mention the spaghetti? + +So the other goal is to be able to control tankrain with a guitar. + +Oh and update. Laptop has a mic, so can do the recording with hush. + +And now I am having dega code + +its deja vu for you know you have an idea you want to pursue and remember +solving the problem before (the problem in this case being reading and writing +files). + +But the problem here is files with a special sound format. And then of course +you realise this is the place where you did it last time. + +Time to see if any of it still works. + +karma currie time to be exact. """ from datetime import datetime import math From e27b04209873045cd27c5906ba2e848d66263e98 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 1 Apr 2018 23:16:38 -0400 Subject: [PATCH 233/642] tankrain tpot hush dega code --- karmapi/hush.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/karmapi/hush.py b/karmapi/hush.py index 3488499..990c218 100644 --- a/karmapi/hush.py +++ b/karmapi/hush.py @@ -41,10 +41,24 @@ So I'm more Carlisle Sultana than Carlos, so this might take a while. Less ambitious goal? Beware if it sounds easy ... remember the black hole of -code. Did I mention the spaghetti? +code. Did I mention the black hole is actually made of spaghetti code? + +All the failed *next generation* projects for the last generation, this is just +one of the holes out there. + +The cool thing is that due to modern version control a code base can easily +belong to multiple black holes simultaneously. + +Of course a lot of this stuff is actually out there in the wild, but that is a +whole other problem. + +Did I mention I digress? So the other goal is to be able to control tankrain with a guitar. +And the teapot might just help with that. Guess the state, bind the state to +actions for tankrain. + Oh and update. Laptop has a mic, so can do the recording with hush. And now I am having dega code From 4377f37d01078dcf7d06861c265885f6ca072b09 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 2 Apr 2018 12:05:06 -0400 Subject: [PATCH 234/642] big bang theories and stormy in a tea pot --- docs/nodice/crquiz.rst | 129 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 docs/nodice/crquiz.rst diff --git a/docs/nodice/crquiz.rst b/docs/nodice/crquiz.rst new file mode 100644 index 0000000..80a48ac --- /dev/null +++ b/docs/nodice/crquiz.rst @@ -0,0 +1,129 @@ +=========== + Questions +=========== + +The nature of the inertial drag field +===================================== + +I spent much of the summer looking at waves in a pool and thinking +about quantum phenomena. + +I also thought about the fields inside colliding black holes and how +the natural numbers might emerge, if you will excuse the pun, +naturally. + +But how it is more complicated than that because of the echoes. And +how at the boundary the echo is modulated by the surrounding universe. + + +[Aside: There are a number of incoherent writings here from that period. One +task ahead is to go through these and perhaps, assuming I can +understand my own writing, translate them into something other people +can understand too. +] + + +Rotation is fundamental to this and the ideas are easiest explained +when two black holes of roughly equal mass collide. + +In layman's terms, I believe what goes in, must come out. + +Now lets scale things down a bit. + +Consider a large rotating sphere of ice and consider how this modulates +the background gravitational field. + +Now assume the sphere has a radius r, big enough that in the time it +takes light to travel distance r, it has rotated an angle \omega and +that \omega * r is large compared to the distance between adjacent H2O +molecules in the ice. + +Inertia, the two versions of G, conservation of momentum. + +Conservation of energy too. + +And then there are thoughts about wave particle duality. + +Hoyle's expanding universe with continuous creation. + +Big bangs are a thing. Almost surely was one in our past. + +Almost surely, a very, very long time ago. + +But regardless of our origin, LIGO experiments show that black holes +are colliding all the time. + +So the good news is that all the physics research around big bang +theory still has great relevance in your paradigm for the universe. + +But I keep coming back to what goes in must come out. + +Bringing this back to earth and the solar system. + +I believe we can diagnose our planet (and solar system too) and +produce models for the magnetic storms going on inside our planet. + +As well as the ocean currents and atmosphere: in short climate models +that tease out the relationships with the key drivers of the dynamics. + +Features such as El Nino could then be forecast with skill much +further into the future. + +Intriguingly, there is a lot of overlap in the software tools for both +problems. + +The problem with software is that it is a general thing. So you can +always further abstract until there is almost nothing left. But this +is also its power because you can build 20-30 general tools that play +together nicely and now you have almost infinite variety. + +And then you end up stuck trying to decide where to go next. + +I may have mentioned before I recall Christopher Zeeman saying that +"all great mathematicians are inherently lazy". + +The same is true in software. + +But in both cases, what Chris forgot to say was that they also will +spend a disproportionate amount of time avoiding tedious, error prone, +repetition. + +Regardless, I do wish to thank Christopher for this, and many other +wonderful pieces of advice and wisdom. + +Harmony +======= + + +Distribution of orientations of spiral galaxies +=============================================== + +Are they random? + +This relates to the does god play dice question. + +Distant mass dominates. + +The quantum clock simulation. + +Implications for humanity. + +Free will? + +Cosmic Microwave Background +=========================== + +At what distance is energy flow in and out balanced? + +Python Simulations +================== + +https://github.com/swfiua/karmapi/karmapi/tpot.py + +Teapot. Nested. + +Data? + +Matlab code. + +Ottawa University? From b620d8c3075f24b1980121d0ac1999d2341817d0 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 4 Apr 2018 10:29:52 -0400 Subject: [PATCH 235/642] inertia drake fermi and more --- docs/nodice/inertia.rst | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 docs/nodice/inertia.rst diff --git a/docs/nodice/inertia.rst b/docs/nodice/inertia.rst new file mode 100644 index 0000000..a12120c --- /dev/null +++ b/docs/nodice/inertia.rst @@ -0,0 +1,16 @@ +==================== + Inertia in science +==================== + +Structure of academia means body of evidence required to question +widely accepted, but mistaken ideas is enormous. + +cf excel inertia. + +human achievement. + +Age of the universe + +Drake's equation, Fermi paradox. + +Intelligent life in the universe. From 0ac16e27d9c8303b96bdf3b1424d68d5e7bd772e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 12 Apr 2018 11:39:59 -0400 Subject: [PATCH 236/642] four books leading to a fifth --- docs/nodice/atowit.rst | 70 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 docs/nodice/atowit.rst diff --git a/docs/nodice/atowit.rst b/docs/nodice/atowit.rst new file mode 100644 index 0000000..6bb881a --- /dev/null +++ b/docs/nodice/atowit.rst @@ -0,0 +1,70 @@ +==================================================== + At some point all numbers are essentially infinite +==================================================== + +So I am reading a brief history of time. + +MJ sent me four books:: + + Kick Off, James Wragg + + A new paradigm for the universe, Colin Rourke + + A brief history of time, Stephen Hawking + + Cloughie, Walking on Water, My Life + + +She's that good. + +Oh and she even managed to include a small cardboard box, which would +have been even better had it contained what it was intended for. + +But the books were just perfect. + +I take Colin everywhere for now. + +His book, and Fred Hoyle's too have been an excellent way to get up to +speed with the thinking in cosmology. + +It has always both intrigued and mystified me. + +Through my life black holes have gone from something on Star Trek to +potentially the key drivers of the universe. + +I wonder if cosmology faces a crisis a little like mathematics went +through int the eighteenth and nineteenth centuries when axiomatics +was born. + +As far as cosmology is concerned, mathematics may be part of the +problem. + +The mathematics of both general relativity and quantum mechanics are +both complex and subtle. + +And we know both are incomplete models that are nonetheless very good +models much of the time. + +Theoretical physics advances as its practitioners explore the +consequences of the mathematics of the various theories. + +Sometimes things get stretched a bit too far. + +Black holes are one such place. + +They are tiny, so according to general relativity, they take no space +at all. + +But the strangeness that is quantum phenomena generates a whole set of +strange questions in the context of black holes. + +Heisenberg says we cannot know its position and its velocity beyond +some amount of certainty. + +It is my belief that the boundaries between black holes and the +surrounding universe will likely have many layers, like the atmosphere +of a giant planet. + +This would be what Colin Rourke refers to as a generator belt. + + From 4ef798db1d6b2f87813997889d5a03d919a778bb Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 12 Apr 2018 22:49:57 -0400 Subject: [PATCH 237/642] infinite love for queen mary codes --- karmapi/mj.py | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 karmapi/mj.py diff --git a/karmapi/mj.py b/karmapi/mj.py new file mode 100644 index 0000000..b49da46 --- /dev/null +++ b/karmapi/mj.py @@ -0,0 +1,98 @@ +""" +Simple substitution + +The Babington Plot according to wiki pedya:: + + https://en.wikipedia.org/wiki/Babington_Plot + +Simon Singh has a book on the history of crytography. + +Will see if I can find one. + +My Queen Mary went with as simple substitution + some magic codes. + +But I'm not sure the magic works, even in python. It's a human thing. + +So, here's a simple sub with a twist. + +""" + +def key_to_alpha(key): + """ Generate alphabet for key + + Idea is run through the key, dropping any + letters already seen. + + Then go back to the beginning of the alphabet and + write letters out that are not in the key. + """ + alphabet = '' + used = set() + + for c in key: + if c.lower() not in used: + alphabet += c + used.add(c) + + a = ord('a') + + for xx in range(26): + c = chr(a + xx) + if c not in used: + alphabet += c + + return alphabet + +def gen_cipher_lookup(alpha, didigs=None): + + didigs = didigs or [1, 2] + + available = [x for x in range(10) if x not in didigs] + print(available) + + calpha = [str(x) for x in available] + for digit in didigs: + for x in available: + calpha.append(str((10 * digit) + x)) + + lookup = {} + for p, c in zip(alpha, calpha): + lookup[p] = c + + return lookup + + +def encode(message, cipher): + + result = '' + for c in message: + code = cipher.get(c, c) + result += code + + return result + + +import argparse +import sys + + +parser = argparse.ArgumentParser() + +parser.add_argument('--key', default='iloveyou') +parser.add_argument('--cheat', action='store_true') + +args = parser.parse_args() + + +message = sys.stdin.read() + +alpha = key_to_alpha(args.key) + +cipher = gen_cipher_lookup(alpha) + +if args.cheat: + for p, c in cipher.items(): + print(p, c) + +print(encode(message, cipher)) + From 91d7ddadee26ba6fe9e91d826912fb0d0b655648 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 12 Apr 2018 22:51:48 -0400 Subject: [PATCH 238/642] puzzle of the day --- docs/nodice/mj.txt | 100 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 docs/nodice/mj.txt diff --git a/docs/nodice/mj.txt b/docs/nodice/mj.txt new file mode 100644 index 0000000..168e95d --- /dev/null +++ b/docs/nodice/mj.txt @@ -0,0 +1,100 @@ +[0, 3, 4, 5, 6, 7, 8, 9] +""" +S0202436 2781027280288280423 + +T176 B9100231628423 P3428 913134261402316 284 290190 2461479:: + + 1728282427://623.2901902461409.42616/290190/B9100231628423_P3428 + +S020423 S0231617 17927 9 104419 423 28176 17027284267 415 132672841626924177. + +W033 2766 015 I 13923 1502314 4236. + +M7 Q86623 M9267 2962328 2902817 927 270202436 2781027280288280423 + 274206 20916013 13414627. + +B828 I'20 23428 278266 28176 20916013 294261927, 65623 023 2472817423. I28'27 9 17820923 281702316. + +S4, 176266'27 9 270202436 27810 2902817 9 282902728. + +""" + +14615 1967_284_9324179(1967): + """ G6236269286 932417910628 15426 1967 + + I1469 027 26823 281726481617 28176 1967, 14264242402316 9237 + 36282862627 932669147 276623. + + T17623 164 1091319 284 28176 106160232302316 415 28176 932417910628 92314 + 29260286 36282862627 4828 2817928 9266 23428 023 28176 1967. + """ + 932417910628 = '' + 827614 = 27628() + + 15426 13 023 1967: + 015 13.3429626() 23428 023 827614: + 932417910628 += 13 + 827614.91414(13) + + 9 = 42614('9') + + 15426 xx 023 26923166(26): + 13 = 131726(9 + xx) + 015 13 23428 023 827614: + 932417910628 += 13 + + 2662882623 932417910628 + +14615 16623_1302417626_34419824(9324179, 1401401627=N4236): + + 1401401627 = 1401401627 426 [1, 2] + + 9590391036 = [x 15426 x 023 26923166(10) 015 x 23428 023 1401401627] + 242602328(9590391036) + + 139324179 = [272826(x) 15426 x 023 9590391036] + 15426 14016028 023 1401401627: + 15426 x 023 9590391036: + 139324179.9242462314(272826((10 * 14016028) + x)) + + 34419824 = {} + 15426 24, 13 023 z024(9324179, 139324179): + 34419824[24] = 13 + + 2662882623 34419824 + + +14615 623134146(20627279166, 1302417626): + + 266278328 = '' + 15426 13 023 20627279166: + 134146 = 1302417626.16628(13, 13) + 266278328 += 134146 + + 2662882623 266278328 + + +0202442628 9261624926276 +0202442628 27727 + + +2492627626 = 9261624926276.A261682062328P92627626() + +2492627626.91414_9261682062328('--1967', 1461598328='03456748') +2492627626.91414_9261682062328('--13176928', 913280423='27284266_282686') + +9261627 = 2492627626.24926276_9261627() + + +20627279166 = 27727.272814023.266914() + +9324179 = 1967_284_9324179(9261627.1967) + +1302417626 = 16623_1302417626_34419824(9324179) + +015 9261627.13176928: + 15426 24, 13 023 1302417626.02862027(): + 242602328(24, 13) + +242602328(623134146(20627279166, 1302417626)) + + From af204fe74617d97247f62f499f126c56b9a27cb4 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 12 Apr 2018 22:55:48 -0400 Subject: [PATCH 239/642] mj option not yet implemented :( --- karmapi/mj.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/karmapi/mj.py b/karmapi/mj.py index b49da46..297b7da 100644 --- a/karmapi/mj.py +++ b/karmapi/mj.py @@ -13,7 +13,7 @@ But I'm not sure the magic works, even in python. It's a human thing. -So, here's a simple sub with a twist. +So, here's a simple sub with a twist for now. """ @@ -79,6 +79,7 @@ def encode(message, cipher): parser = argparse.ArgumentParser() parser.add_argument('--key', default='iloveyou') +parser.add_argument('--mj', action='store_true') parser.add_argument('--cheat', action='store_true') args = parser.parse_args() @@ -90,6 +91,10 @@ def encode(message, cipher): cipher = gen_cipher_lookup(alpha) +if args.mj: + print("Not yet implemented :(") + sys.exit(26) + if args.cheat: for p, c in cipher.items(): print(p, c) From 7ca90102cd16530ea77d5fc75f035487a8b2dda3 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 13 Apr 2018 18:45:05 -0400 Subject: [PATCH 240/642] big red algebra book --- docs/nodice/popebb.rst | 51 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 docs/nodice/popebb.rst diff --git a/docs/nodice/popebb.rst b/docs/nodice/popebb.rst new file mode 100644 index 0000000..813fbf4 --- /dev/null +++ b/docs/nodice/popebb.rst @@ -0,0 +1,51 @@ +Hi Colin, + +A copy of "A Brief History of Time" crossed my path. + +I'd read it before, but it is a whole different story in the light of +your theories. + +In fact, much of it is very helpful in thinking about the black hole +inertial drag issue. + +Surface area of combined black holes is >= sum of the areas of the +pieces, entropy and more. + +Oh and I wasn't aware that the Pope said yes to the Big Bang Theory in +the 1950's. + +This problem is way bigger than I realised. + +I have been flipping between the two books and now feel I have a +pretty good understanding of it all. + +de Sitter space -- so a sphere embedded in Minkowski space? + +This reminds me of a piece I wrote back in September when I started +thinking about the black holes (or neutron stars!) colliding. + +I think I should take another pass through these writings. With luck +I can turn it into a nice introduction to your book. + +Like the *Big Red Algebra book* back in the day on how to care for a +pet algebra. + +Here's a link to the piece back in September, `balls.rst`. + +I am starting to think about simulations of de Sitter space. + +Thank you for the book. I think the arguments are very, very strong +and the case is compelling. + +Changing the potential age of the universe by many orders of magnitude +has profound implications. + +I am also trying to weave into my ideas some thoughts on information, +observations data and knowledge. + +And in particular, inertia and memory in societies. + +All the best. + +Johnny + From 7115665ad27c007432d6bdb71d3ff58755d2eb8c Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 27 Apr 2018 15:29:24 -0400 Subject: [PATCH 241/642] inflight pixel fix with sub directory ignore --- karmapi/pixin.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/karmapi/pixin.py b/karmapi/pixin.py index 59991f0..982b9e1 100644 --- a/karmapi/pixin.py +++ b/karmapi/pixin.py @@ -30,6 +30,8 @@ def parse(item): def pparse(pitem): """ Convert path into date time """ fields = pitem.stem.split('_') + print(fields) + name, day, second = fields[:3] year = int(day[:4]) @@ -61,6 +63,10 @@ def pparse(pitem): for item in items.glob('*'): + # skip sub-folders for now. Pixel pics come with .inflight + if item.is_dir(): + continue + when, what = parse(item) if when and what: From 13f86db9272f3467536224b60ffff10e96a07b7f Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 5 May 2018 16:43:29 -0400 Subject: [PATCH 242/642] trying to figure out f string formatting --- karmapi/pixin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karmapi/pixin.py b/karmapi/pixin.py index 982b9e1..2fd89b5 100644 --- a/karmapi/pixin.py +++ b/karmapi/pixin.py @@ -15,7 +15,7 @@ def warp(dest, when): folder = dest / str(when.year) / str(when.month) / str(when.day) - return folder / f'{when.hour}{when.minute}{when.second}' + return folder / f'{02d:when.hour}{02d:when.minute}{02d:when.second}' def parse(item): """ Oh no.. date parsing time """ From 78b548970102219082d22452109f542a6aa54503 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 5 May 2018 23:32:21 -0400 Subject: [PATCH 243/642] f string formats for time in pixin --- karmapi/pixin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karmapi/pixin.py b/karmapi/pixin.py index 2fd89b5..62154be 100644 --- a/karmapi/pixin.py +++ b/karmapi/pixin.py @@ -15,7 +15,7 @@ def warp(dest, when): folder = dest / str(when.year) / str(when.month) / str(when.day) - return folder / f'{02d:when.hour}{02d:when.minute}{02d:when.second}' + return folder / f'{when.hour:02}{when.minute:02}{when.second:02}' def parse(item): """ Oh no.. date parsing time """ From d1e24d2b3db0a0b02c4edd146ee0d8eaf70fc583 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 6 May 2018 13:35:11 -0400 Subject: [PATCH 244/642] gamma ray gravitational illusions --- docs/nodice/grb.rst | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 docs/nodice/grb.rst diff --git a/docs/nodice/grb.rst b/docs/nodice/grb.rst new file mode 100644 index 0000000..8b7c83c --- /dev/null +++ b/docs/nodice/grb.rst @@ -0,0 +1,37 @@ +================== + Gamma Ray Bursts +================== + +I am continuing to enjoy Colin Rourke's, "A new paradigm for the +universe". + +*Appendix G: Gamma Ray Bursts* has my focus at the moment. + +It is a summary of a joint paper with R MacKay:: + + Are gamma-ray bursts optical illusions? + + Palestinian J Math 5(Spec.1) (2016) 175--197 + +You can find it on the web: + +* http://msp.warwick.ac.uk/~cpr/paradigm/GammaRayBursts.pdf + +* http://msp.warwick.ac.uk/~cpr/paradigm/GammaRayBursts.pdf + +I am finding the mathematics heavy going, but the commentary and the +ideas are making sense intuitively, at least if I am understanding +things correctly. + +The paper posits that gamma ray bursts are in fact the result of an +emitter, that has been invisible to us for an essentially infinite [1] +amount of time, suddenly becomes visible. + +The emitter is assumed(?) to be adjacent to a black hole, a point in +space time where time is slowed by the intense gravitational field. + +View a black hole as a place where time slows down. + +As such it acts as a giant capacitor, storing up energy before +releasing a burst to the surrounding universe. + From 6ec4bd977947414d9290bce05fa54f28a79b42f6 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 8 May 2018 22:23:18 -0400 Subject: [PATCH 245/642] more grb thoughts --- docs/nodice/grb.rst | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/docs/nodice/grb.rst b/docs/nodice/grb.rst index 8b7c83c..3ae350e 100644 --- a/docs/nodice/grb.rst +++ b/docs/nodice/grb.rst @@ -35,3 +35,26 @@ View a black hole as a place where time slows down. As such it acts as a giant capacitor, storing up energy before releasing a burst to the surrounding universe. +Mixing of inertial fields +========================= + + +Random? +======= + + +Synchronisation +=============== + + +Pseudo Harmonic +=============== + +Solar System +============ + +Earth +===== + +El Nino +------- From 0c43a60534789fb58d241e922147d2f7e59b0ee2 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 13 May 2018 16:19:53 -0400 Subject: [PATCH 246/642] cpr simulator --- karmapi/cpr.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 karmapi/cpr.py diff --git a/karmapi/cpr.py b/karmapi/cpr.py new file mode 100644 index 0000000..b7bc640 --- /dev/null +++ b/karmapi/cpr.py @@ -0,0 +1,12 @@ +""" +Not, CPR, but Colin P Rourke. + +Simulate nested spherical waves. +""" + +class Sphere: + + def __init__(self): + + + From 4245a7c8aaa7d1a616ae19db94f869a02859c4f4 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 13 May 2018 16:24:42 -0400 Subject: [PATCH 247/642] create a random ball --- karmapi/cpr.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index b7bc640..bf34017 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -3,10 +3,30 @@ Simulate nested spherical waves. """ +import argparse + +from karmapi import base, tpot + +from random import random, randint class Sphere: - def __init__(self): + def __init__(self, size=None): + + size = size or 4 + + grid = [] + for lat in range(size): + grid.append([random() for x in range(size)]) + + print(grid) + +if __name__ == '__main__': + + ball = Sphere() + + + From e30876834d66ed0b0a2e7693e469a6bd60333e73 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 13 May 2018 20:21:29 -0400 Subject: [PATCH 248/642] borrowing from beanstalk for nested balls --- karmapi/cpr.py | 47 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index bf34017..ab03b04 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -5,6 +5,8 @@ """ import argparse +import curio + from karmapi import base, tpot from random import random, randint @@ -21,11 +23,52 @@ def __init__(self, size=None): print(grid) -if __name__ == '__main__': + async def run(self): + pass + +class NestedWaves(pigfarm.Yard): + pass + + async def run(self): + pass + +def main(): + + parser = argparse.ArgumentParser() + + parser.add_argument('--gallery', nargs='*', default=['.', '../gallery']) + parser.add_argument( + '--snowy', action='store_true', + help='random cat pictures') + parser.add_argument( + '--name', default='tree', + help='what to show') + + + args = parser.parse_args() - ball = Sphere() + farm = pigfarm.PigFarm() + + from karmapi.mclock2 import GuidoClock + + farm.add(GuidoClock) + + name = args.name + if args.snowy: + name = 'cat' + + farm.add(NestedWaves, dict(gallery=args.gallery, name=name)) + + curio.run(farm.run(), with_monitor=True) + + + +if __name__ == '__main__': + + main() + From 936128ae45bad45125aa0cc1456dc2637593e2e1 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 13 May 2018 20:22:37 -0400 Subject: [PATCH 249/642] how could i forget the pig farm? --- karmapi/cpr.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index ab03b04..aeebc57 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -7,7 +7,7 @@ import curio -from karmapi import base, tpot +from karmapi import base, tpot, pigfarm from random import random, randint From 7c86e782d27d6e9aab3df1f34d6df42fac64603a Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 13 May 2018 23:35:29 -0400 Subject: [PATCH 250/642] cpr coming along --- karmapi/cpr.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index aeebc57..8c62b93 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -27,7 +27,22 @@ async def run(self): pass class NestedWaves(pigfarm.Yard): - pass + + def __init__(self, parent, start=4, end=4*1024, skip=4): + """ Initialise the thing """ + + super().__init__(parent) + + self.start = start + self.end = end + self.skip = skip + + # expect we'll find something to do with a queue + self.uq = curio.UniversalQueue() + + async def start(self): + """ Start the thing running """ + pass async def run(self): pass @@ -57,7 +72,7 @@ def main(): if args.snowy: name = 'cat' - farm.add(NestedWaves, dict(gallery=args.gallery, name=name)) + farm.add(NestedWaves) curio.run(farm.run(), with_monitor=True) From 5998f78fda672073b64e8e15745845f6f5f40dc3 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 15 May 2018 19:01:12 -0400 Subject: [PATCH 251/642] nested waves initialisation --- karmapi/cpr.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 8c62b93..03c115e 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -28,14 +28,14 @@ async def run(self): class NestedWaves(pigfarm.Yard): - def __init__(self, parent, start=4, end=4*1024, skip=4): + def __init__(self, parent, n=1024, base=4, inc=4): """ Initialise the thing """ super().__init__(parent) - self.start = start - self.end = end - self.skip = skip + self.base = base + self.n = n + self.inc = inc # expect we'll find something to do with a queue self.uq = curio.UniversalQueue() From 9a2017675de8040e975c8654d34f566a0bef7fb5 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 15 May 2018 19:07:27 -0400 Subject: [PATCH 252/642] run the waves, don't worry about start --- karmapi/cpr.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 03c115e..ee90fd9 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -40,11 +40,8 @@ def __init__(self, parent, n=1024, base=4, inc=4): # expect we'll find something to do with a queue self.uq = curio.UniversalQueue() - async def start(self): - """ Start the thing running """ - pass - async def run(self): + """ Run the waves """ pass def main(): From 23a4c4773944b8260e05741eebd9bb91ed361d68 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 19 May 2018 18:14:11 -0400 Subject: [PATCH 253/642] use cpr to build balls --- karmapi/cpr.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index ee90fd9..804aefe 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -40,6 +40,15 @@ def __init__(self, parent, n=1024, base=4, inc=4): # expect we'll find something to do with a queue self.uq = curio.UniversalQueue() + self.build() + + def build(self): + """ Create the balls """ + # add a bunch of spheres to the queue + size = self.base + for ball in range(self.n): + uq.put(Sphere(self.base + (ball * self.inc))) + async def run(self): """ Run the waves """ pass From 8def2f718283893df0c9280d8276e7f10d11bb12 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 19 May 2018 19:20:41 -0400 Subject: [PATCH 254/642] cpr for cpr gives black screen happiness --- karmapi/cpr.py | 49 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 12 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 804aefe..4d5e383 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -21,14 +21,15 @@ def __init__(self, size=None): for lat in range(size): grid.append([random() for x in range(size)]) - print(grid) + self.grid = grid - async def run(self): - pass + def run(self): + + print(len(self.grid)) class NestedWaves(pigfarm.Yard): - def __init__(self, parent, n=1024, base=4, inc=4): + def __init__(self, parent, n=10, base=4, inc=4): """ Initialise the thing """ super().__init__(parent) @@ -45,13 +46,40 @@ def __init__(self, parent, n=1024, base=4, inc=4): def build(self): """ Create the balls """ # add a bunch of spheres to the queue - size = self.base for ball in range(self.n): - uq.put(Sphere(self.base + (ball * self.inc))) + size = self.base + (ball * self.inc) + self.uq.put(Sphere(size)) + + + def step_balls(self): + uq = curio.UniversalQueue() + while self.uq.qsize(): + ball = self.uq.get() + ball.run() + uq.put(ball) + + self.uq = uq + + def draw(self): + pass + async def run(self): """ Run the waves """ - pass + + self.sleep = 0.05 + + self.set_background() + + while True: + self.canvas.delete('all') + + self.draw() + + self.step_balls() + + await curio.sleep(self.sleep) + def main(): @@ -64,6 +92,7 @@ def main(): parser.add_argument( '--name', default='tree', help='what to show') + parser.add_argument('-n', type=int, default=10) args = parser.parse_args() @@ -74,11 +103,7 @@ def main(): farm.add(GuidoClock) - name = args.name - if args.snowy: - name = 'cat' - - farm.add(NestedWaves) + farm.add(NestedWaves, dict(n=args.n)) curio.run(farm.run(), with_monitor=True) From a395d496d545785e1b0e13343fdfaa47b8250cb0 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 20 May 2018 19:27:18 -0400 Subject: [PATCH 255/642] inc option for cpr --- karmapi/cpr.py | 3 ++- karmapi/wc.py | 34 +++++++++++++++++----------------- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 4d5e383..cd0854c 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -93,7 +93,8 @@ def main(): '--name', default='tree', help='what to show') parser.add_argument('-n', type=int, default=10) - + parser.add_argument('--inc', type=int, default=4) + args = parser.parse_args() diff --git a/karmapi/wc.py b/karmapi/wc.py index a12fd6e..66a3737 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -347,21 +347,21 @@ class Novgorod(Place): """ Central """ name = 'Nizhny Novgorod' - lat = None - lon = None + lat = 48 + (44 / 60) + lon = 44 + (33 / 60) class Kaliningrad(Place): """ North West port """ name = 'Kaliningrad' - lat = None - lon = None + lat = 54 + (42 / 60) + lon = 20 + (32 / 60) class RostovOnDon(Place): """ Sheffield in Russia """ name = "Rostov-on-Don" - lat = None - lon = None + lat = 47 + (13 / 60) + lon = 39 + (44 / 60) class Kazan(Place): """ @@ -380,29 +380,29 @@ class Samara(Place): """ """ name = 'Samara' - lat = None - lon = None + lat = 53 + (17 / 60) + lon = 10 + (14 / 60) class Yekaterinburg(Place): """ """ - name = '' - lat = None - lon = None + name = 'Central Stadium' + lat = 56 + (50 / 60) + lon = 60 + (34 / 60) class Saransk(Place): """ """ - name = '' - lat = None - lon = None + name = 'Mordovia Arena' + lat = 54 + (11 / 60) + lon = 45 + (12 / 60) class Sochi(Place): """ """ - name = '' - lat = None - lon = None + name = 'Fisht Olympic Stadium' + lat = 43 + (24 / 60) + lon = 39 + (57 / 60) From 9ecb0ca8a41be3510492e03562dcc04f55fbbf20 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 20 May 2018 19:27:18 -0400 Subject: [PATCH 256/642] inc option for cpr and places for wc --- karmapi/cpr.py | 3 ++- karmapi/wc.py | 34 +++++++++++++++++----------------- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 4d5e383..cd0854c 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -93,7 +93,8 @@ def main(): '--name', default='tree', help='what to show') parser.add_argument('-n', type=int, default=10) - + parser.add_argument('--inc', type=int, default=4) + args = parser.parse_args() diff --git a/karmapi/wc.py b/karmapi/wc.py index a12fd6e..66a3737 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -347,21 +347,21 @@ class Novgorod(Place): """ Central """ name = 'Nizhny Novgorod' - lat = None - lon = None + lat = 48 + (44 / 60) + lon = 44 + (33 / 60) class Kaliningrad(Place): """ North West port """ name = 'Kaliningrad' - lat = None - lon = None + lat = 54 + (42 / 60) + lon = 20 + (32 / 60) class RostovOnDon(Place): """ Sheffield in Russia """ name = "Rostov-on-Don" - lat = None - lon = None + lat = 47 + (13 / 60) + lon = 39 + (44 / 60) class Kazan(Place): """ @@ -380,29 +380,29 @@ class Samara(Place): """ """ name = 'Samara' - lat = None - lon = None + lat = 53 + (17 / 60) + lon = 10 + (14 / 60) class Yekaterinburg(Place): """ """ - name = '' - lat = None - lon = None + name = 'Central Stadium' + lat = 56 + (50 / 60) + lon = 60 + (34 / 60) class Saransk(Place): """ """ - name = '' - lat = None - lon = None + name = 'Mordovia Arena' + lat = 54 + (11 / 60) + lon = 45 + (12 / 60) class Sochi(Place): """ """ - name = '' - lat = None - lon = None + name = 'Fisht Olympic Stadium' + lat = 43 + (24 / 60) + lon = 39 + (57 / 60) From 5c264b723c42f476fcff7d7836132bbae02734dd Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 20 May 2018 19:44:32 -0400 Subject: [PATCH 257/642] group a places assigned for wc --- karmapi/wc.py | 47 ++++++++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 66a3737..1e0d8b2 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -406,25 +406,24 @@ class Sochi(Place): -places = [ +places = dict( - Moscow(), - Spartak(), - StPetersberg(), + moscow=Moscow(), + spartak=Spartak(), + stpetersberg=StPetersberg(), - Kaliningrad(), + kaliningrad=Kaliningrad(), - Novgorod(), - Yekaterinburg(), - Kazan(), - Saransk(), - Samara(), + novgorod=Novgorod(), + yekaterinburg=Yekaterinburg(), + kazan=Kazan(), + saransk=Saransk(), + samara=Samara(), - Volgograd(), - RostovOnDon(), - Sochi(), - - ] + volgograd=Volgograd(), + rostovondon=RostovOnDon(), + sochi=Sochi(), + ) # Group A @@ -480,19 +479,29 @@ class Sochi(Place): a=Group(teams = [rus, sau, egy, urg], games = [ Game(rus, sau, datetime(2018, 6, 14, 15, 0), + where=places['moscow'], ascore=4, bscore=0), Game(egy, urg, datetime(2018, 6, 15, 12, 0), + where=places['yekaterinburg'], ascore=1, bscore=2), - Game(rus, egy, datetime(2018, 6, 19, 18, 0)), + Game(rus, egy, datetime(2018, 6, 19, 18, 0), + where=places['stpetersberg'], + ), - Game(urg, sau, datetime(2018, 6, 20, 15, 0)), + Game(urg, sau, datetime(2018, 6, 20, 15, 0), + where=places['rostovondon'], + ), - Game(urg, rus, datetime(2018, 6, 19, 14, 0)), - Game(sau, egy, datetime(2018, 6, 19, 14, 0)), + Game(urg, rus, datetime(2018, 6, 19, 14, 0), + where=places['samara'], + ), + Game(sau, egy, datetime(2018, 6, 19, 14, 0), + where=places['volgograd'], + ), ]), b=Group(teams = [por, spa, mor, ira], From c92e90c56492b9340b277c6a95b541e6f6955771 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 20 May 2018 19:50:08 -0400 Subject: [PATCH 258/642] assigning places and breaking stuff --- karmapi/wc.py | 43 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 1e0d8b2..46b02bc 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -507,43 +507,62 @@ class Sochi(Place): b=Group(teams = [por, spa, mor, ira], games = [ Game(mor, ira, datetime(2018, 6, 15, 15, 0), + where=places[''], ascore=2, bscore=2), Game(por, spa, datetime(2018, 6, 15, 18, 0), + where=places[''], ascore=3, bscore=2), - Game(por, mor, datetime(2018, 6, 20, 12, 0)), - Game(ira, spa, datetime(2018, 6, 20, 18, 0)), + Game(por, mor, datetime(2018, 6, 20, 12, 0), + where=places[''], + ), + Game(ira, spa, datetime(2018, 6, 20, 18, 0), + where=places[''], + ), - Game(ira, por, datetime(2018, 6, 25, 18, 0)), - Game(spa, mor, datetime(2018, 6, 25, 18, 0)), + Game(ira, por, datetime(2018, 6, 25, 18, 0), + where=places[''], + ), + Game(spa, mor, datetime(2018, 6, 25, 18, 0), + where=places[''], + ), ]), c=Group(teams = [fra, aus, per, den], games = [ Game(fra, aus, datetime(2018, 6, 16, 10, 0), + where=places[''], ascore=1, bscore=2), Game(per, den, datetime(2018, 6, 16, 14, 0), + where=places[''], ascore=2, bscore=2), - Game(den, aus, datetime(2018, 6, 21, 12, 0)), - Game(fra, per, datetime(2018, 6, 21, 15, 0)), + Game(den, aus, datetime(2018, 6, 21, 12, 0), + ), + Game(fra, per, datetime(2018, 6, 21, 15, 0), + ), + + Game(den, fra, datetime(2018, 6, 26, 14, 0), + ), + Game(aus, per, datetime(2018, 6, 26, 14, 0), + ), - Game(den, fra, datetime(2018, 6, 26, 14, 0)), - Game(aus, per, datetime(2018, 6, 26, 14, 0)), ]), d=Group(teams = [arg, ice, cro, nig], games = [ Game(arg, ice, datetime(2018, 6, 16, 13, 0), + where=places[''], ascore=3, bscore=2), Game(cro, nig, datetime(2018, 6, 16, 19, 0), + where=places[''], ascore=2, bscore=2), @@ -560,9 +579,11 @@ class Sochi(Place): games = [ Game(crc, ser, datetime(2018, 6, 17, 12, 0), + where=places[''], ascore=2, bscore=4), Game(bra, swi, datetime(2018, 6, 17, 18, 0), + where=places[''], ascore=3, bscore=3), @@ -577,9 +598,11 @@ class Sochi(Place): games = [ Game(ger, mex, datetime(2018, 6, 17, 15, 0), + where=places[''], ascore=1, bscore=2), Game(swe, sko, datetime(2018, 6, 18, 12, 0), + where=places[''], ascore=3, bscore=2), @@ -594,9 +617,11 @@ class Sochi(Place): games = [ Game(bel, pan, datetime(2018, 6, 18, 15, 0), + where=places[''], ascore=3, bscore=1), Game(tun, eng, datetime(2018, 6, 18, 18, 0), + where=places[''], ascore=0, bscore=0), @@ -612,9 +637,11 @@ class Sochi(Place): games = [ Game(col, jap, datetime(2018, 6, 19, 12, 0), + where=places[''], ascore=2, bscore=1), Game(pol, sen, datetime(2018, 6, 19, 15, 0), + where=places[''], ascore=3, bscore=2), From 621a5721dd531eb07d61c09a124fd27b7a2b04fd Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 20 May 2018 20:04:29 -0400 Subject: [PATCH 259/642] more place juggling --- karmapi/wc.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 46b02bc..ac3adc5 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -543,13 +543,17 @@ class Sochi(Place): Game(den, aus, datetime(2018, 6, 21, 12, 0), + where=places[''], ), Game(fra, per, datetime(2018, 6, 21, 15, 0), + where=places[''], ), Game(den, fra, datetime(2018, 6, 26, 14, 0), + where=places[''], ), Game(aus, per, datetime(2018, 6, 26, 14, 0), + where=places[''], ), ]), @@ -684,6 +688,27 @@ class Sochi(Place): print("It's a knock out!") # Simulate a knockout draw + bugs -jsf = JeuxSansFrontieres(groups) +jsf_places = [ + places[''], + places[''], + places[''], + places[''], + places[''], + places[''], + places[''], + places[''], + places[''], + places[''], + places[''], + places[''], + places[''], + places[''], + places[''], + places[''], + ] + +jsf_dates = [ + ] +jsf = JeuxSansFrontieres(groups, places=jsf_places, dates=jsf_dates) From c569b3d1d873d2043958c3e9a14b0bcf0c069071 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 20 May 2018 20:31:30 -0400 Subject: [PATCH 260/642] dates and places in rusher if your listning --- karmapi/wc.py | 61 ++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 43 insertions(+), 18 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index ac3adc5..e6ac439 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -407,7 +407,7 @@ class Sochi(Place): places = dict( - + moscow=Moscow(), spartak=Spartak(), stpetersberg=StPetersberg(), @@ -424,7 +424,7 @@ class Sochi(Place): rostovondon=RostovOnDon(), sochi=Sochi(), ) - +places[''] = '???' # Group A rus = Team('RUS') @@ -689,25 +689,50 @@ class Sochi(Place): # Simulate a knockout draw + bugs jsf_places = [ - places[''], - places[''], - places[''], - places[''], - places[''], - places[''], - places[''], - places[''], - places[''], - places[''], - places[''], - places[''], - places[''], - places[''], - places[''], - places[''], + places['kazan'], + places['sochi'], + places['moscow'], + places['novgorod'], + + places['samara'], + places['rostovondon'], + places['stpetersberg'], + places['spartak'], + + places['novgorod'], + places['kazan'], + places['samara'], + places['sochi'], + + places['stpetersberg'], + places['moscow'], + + places['stpetersberg'], + + places['moscow'], ] jsf_dates = [ + datetime(2018, 6, 30, 14, 0), + datetime(2018, 6, 30, 18, 0), + datetime(2018, 7, 1, 14, 0), + datetime(2018, 7, 1, 18, 0), + + datetime(2018, 7, 2, 14, 0), + datetime(2018, 7, 2, 18, 0), + datetime(2018, 7, 3, 14, 0), + datetime(2018, 7, 3, 18, 0), + + datetime(2018, 7, 6, 14, 0), + datetime(2018, 7, 6, 18, 0), + datetime(2018, 7, 7, 14, 0), + datetime(2018, 7, 7, 18, 0), + + datetime(2018, 7, 10, 18, 0), + datetime(2018, 7, 11, 18, 0), + + datetime(2018, 7, 14, 14, 0), + datetime(2018, 7, 15, 15, 0), ] jsf = JeuxSansFrontieres(groups, places=jsf_places, dates=jsf_dates) From d8f73cfd715f777d1db5f4c75f2ba863a1961c73 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 22 May 2018 14:53:24 -0400 Subject: [PATCH 261/642] mexican waves pig farm and async wc games --- karmapi/wc.py | 98 ++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 77 insertions(+), 21 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index e6ac439..c063a3e 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -113,6 +113,8 @@ import random import argparse +import curio +from karmapi import pigfarm from datetime import datetime, timedelta @@ -140,6 +142,34 @@ def __str__(self): return msg +class Game: + + def __init__(self, a, b, when, where=None, ascore=None, bscore=None): + + self.a = a + self.b = b + self.when = when + self.where = where + + self.ascore = ascore + self.bscore = bscore + + def score(self): + """ Make up a score """ + ascore = random.randint(0, random.randint(0, 5)) + bscore = random.randint(0, random.randint(0, 5)) + + return self.ascore or ascore, self.bscore or bscore + + def __str__(self): + + return f'{self.a.name} {self.b.name} {self.when} {self.where}' + + async def run(self): + """ Run the game """ + pass + + class Group: def __init__(self, teams=None, games=None): @@ -285,30 +315,11 @@ def __init__(self, groups, places=None, dates=None): for game in self.games: print(game) + def run(self): + """ Run the games """ -class Game: - - def __init__(self, a, b, when, where=None, ascore=None, bscore=None): - - self.a = a - self.b = b - self.when = when - self.where = where - self.ascore = ascore - self.bscore = bscore - - def score(self): - """ Make up a score """ - ascore = random.randint(0, random.randint(0, 5)) - bscore = random.randint(0, random.randint(0, 5)) - - return self.ascore or ascore, self.bscore or bscore - - def __str__(self): - - return f'{self.a.name} {self.b.name} {self.when} {self.where}' class Place: @@ -736,4 +747,49 @@ class Sochi(Place): ] jsf = JeuxSansFrontieres(groups, places=jsf_places, dates=jsf_dates) + +# add a PI Gui? +class MexicanWaves(pigfarm.Yard): + + def __init__(self, parent): + """ Initialise the thing """ + + super().__init__(parent) + + + def step_balls(self): + """ do something here """ + pass + + def draw(self): + pass + + async def run(self): + """ Run the waves """ + + self.sleep = 0.05 + + self.set_background() + + while True: + self.canvas.delete('all') + + self.draw() + + self.step_balls() + + await curio.sleep(self.sleep) + + +farm = pigfarm.PigFarm() + +from karmapi.mclock2 import GuidoClock +farm.add(GuidoClock) +farm.add(MexicanWaves) + +# add a random wc time warper? + +curio.run(farm.run(), with_monitor=True) + + From c963ed28e267ffc202258a0591b28c0d038009b0 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 22 May 2018 15:11:45 -0400 Subject: [PATCH 262/642] buglets in the tables --- karmapi/wc.py | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index c063a3e..ae0fd2f 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -220,8 +220,8 @@ def run(self): if ascore > bscore: a.points += 3 - elif bscore > bscore: - b.points += bscore + elif bscore > ascore: + b.points += 3 else: a.points += 1 @@ -670,17 +670,8 @@ class Sochi(Place): # group winners and seconds winners = {} seconds = {} -for item in 'abcdefgh': - group = groups[item] - - winners[group] = group.winner() - seconds[group] = group.second() - - -# do something ? - -# print out the games +# print out the games while we are at it for xx, group in groups.items(): print(xx) @@ -692,6 +683,9 @@ class Sochi(Place): group.run() print() + winners[xx] = group.winner() + seconds[xx] = group.second() + group.table() @@ -781,15 +775,20 @@ async def run(self): await curio.sleep(self.sleep) -farm = pigfarm.PigFarm() +parser = argparse.ArgumentParser() +parser.add_argument('--pig', action='store_true') +args = parser.parse_args() + +if args.pig: + farm = pigfarm.PigFarm() -from karmapi.mclock2 import GuidoClock + from karmapi.mclock2 import GuidoClock -farm.add(GuidoClock) -farm.add(MexicanWaves) + farm.add(GuidoClock) + farm.add(MexicanWaves) -# add a random wc time warper? + # add a random wc time warper? -curio.run(farm.run(), with_monitor=True) + curio.run(farm.run(), with_monitor=True) From d76d1294e04fb0fb3298cfe668761bd1a210904f Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 22 May 2018 17:27:35 -0400 Subject: [PATCH 263/642] wc group game places complete? --- karmapi/wc.py | 124 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 82 insertions(+), 42 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index ae0fd2f..c72a0d8 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -518,26 +518,26 @@ class Sochi(Place): b=Group(teams = [por, spa, mor, ira], games = [ Game(mor, ira, datetime(2018, 6, 15, 15, 0), - where=places[''], + where=places['stpetersberg'], ascore=2, bscore=2), Game(por, spa, datetime(2018, 6, 15, 18, 0), - where=places[''], + where=places['sochi'], ascore=3, bscore=2), Game(por, mor, datetime(2018, 6, 20, 12, 0), - where=places[''], + where=places['moscow'], ), Game(ira, spa, datetime(2018, 6, 20, 18, 0), - where=places[''], + where=places['kazan'], ), Game(ira, por, datetime(2018, 6, 25, 18, 0), - where=places[''], + where=places['saransk'], ), Game(spa, mor, datetime(2018, 6, 25, 18, 0), - where=places[''], + where=places['kaliningrad'], ), ]), @@ -545,26 +545,26 @@ class Sochi(Place): games = [ Game(fra, aus, datetime(2018, 6, 16, 10, 0), - where=places[''], + where=places['kazan'], ascore=1, bscore=2), Game(per, den, datetime(2018, 6, 16, 14, 0), - where=places[''], + where=places['saransk'], ascore=2, bscore=2), Game(den, aus, datetime(2018, 6, 21, 12, 0), - where=places[''], + where=places['samara'], ), Game(fra, per, datetime(2018, 6, 21, 15, 0), - where=places[''], + where=places['yekaterinburg'], ), Game(den, fra, datetime(2018, 6, 26, 14, 0), - where=places[''], + where=places['moscow'], ), Game(aus, per, datetime(2018, 6, 26, 14, 0), - where=places[''], + where=places['sochi'], ), ]), @@ -573,98 +573,138 @@ class Sochi(Place): games = [ Game(arg, ice, datetime(2018, 6, 16, 13, 0), - where=places[''], + where=places['spartak'], ascore=3, bscore=2), Game(cro, nig, datetime(2018, 6, 16, 19, 0), - where=places[''], + where=places['kaliningrad'], ascore=2, bscore=2), - Game(arg, cro, datetime(2018, 6, 21, 18, 0)), + Game(arg, cro, datetime(2018, 6, 21, 18, 0), + where=places['novgorod'], + ), - Game(nig, ice, datetime(2018, 6, 22, 15, 0)), + Game(nig, ice, datetime(2018, 6, 22, 15, 0), + where=places['volgograd'], + ), - Game(nig, arg, datetime(2018, 6, 26, 18, 0)), - Game(ice, cro, datetime(2018, 6, 26, 18, 0)), + Game(nig, arg, datetime(2018, 6, 26, 18, 0), + where=places['stpetersberg'], + ), + Game(ice, cro, datetime(2018, 6, 26, 18, 0), + where=places['rostovondon'], + ), ]), e=Group(teams = [bra, swi, crc, ser], games = [ Game(crc, ser, datetime(2018, 6, 17, 12, 0), - where=places[''], + where=places['samara'], ascore=2, bscore=4), Game(bra, swi, datetime(2018, 6, 17, 18, 0), - where=places[''], + where=places['rostovondon'], ascore=3, bscore=3), - Game(bra, crc, datetime(2018, 6, 22, 12, 0)), - Game(ser, swi, datetime(2018, 6, 22, 18, 0)), + Game(bra, crc, datetime(2018, 6, 22, 12, 0), + where=places['stpetersberg'], + ), + Game(ser, swi, datetime(2018, 6, 22, 18, 0), + where=places['kaliningrad'], + ), - Game(ser, bra, datetime(2018, 6, 27, 18, 0)), - Game(swi, crc, datetime(2018, 6, 27, 18, 0)), + Game(ser, bra, datetime(2018, 6, 27, 18, 0), + where=places['spartak'], + ), + Game(swi, crc, datetime(2018, 6, 27, 18, 0), + where=places['novgorod'], + ), ]), f=Group(teams = [ger, swe, mex, sko], games = [ Game(ger, mex, datetime(2018, 6, 17, 15, 0), - where=places[''], + where=places['moscow'], ascore=1, bscore=2), Game(swe, sko, datetime(2018, 6, 18, 12, 0), - where=places[''], + where=places['novgorod'], ascore=3, bscore=2), - Game(sko, mex, datetime(2018, 6, 23, 15, 0)), - Game(ger, swe, datetime(2018, 6, 23, 18, 0)), + Game(sko, mex, datetime(2018, 6, 23, 15, 0), + where=places['rostovondon'], + ), + Game(ger, swe, datetime(2018, 6, 23, 18, 0), + where=places['sochi'], + ), - Game(sko, ger, datetime(2018, 6, 27, 14, 0)), - Game(mex, swe, datetime(2018, 6, 27, 14, 0)), + Game(sko, ger, datetime(2018, 6, 27, 14, 0), + where=places['kazan'], + ), + Game(mex, swe, datetime(2018, 6, 27, 14, 0), + where=places['yekaterinburg'], + ), ]), g=Group(teams = [bel, pan, tun, eng], games = [ Game(bel, pan, datetime(2018, 6, 18, 15, 0), - where=places[''], + where=places['sochi'], ascore=3, bscore=1), Game(tun, eng, datetime(2018, 6, 18, 18, 0), - where=places[''], + where=places['volgograd'], ascore=0, bscore=0), - Game(bel, tun, datetime(2018, 6, 23, 12, 0)), + Game(bel, tun, datetime(2018, 6, 23, 12, 0), + where=places['spartak'], + ), - Game(eng, pan, datetime(2018, 6, 24, 12, 0)), + Game(eng, pan, datetime(2018, 6, 24, 12, 0), + where=places['novgorod'], + ), - Game(eng, bel, datetime(2018, 6, 28, 18, 0)), - Game(pan, tun, datetime(2018, 6, 28, 18, 0)), + Game(eng, bel, datetime(2018, 6, 28, 18, 0), + where=places['kaliningrad'], + ), + Game(pan, tun, datetime(2018, 6, 28, 18, 0), + where=places['saransk'], + ), ]), h=Group(teams = [pol, sen, col, jap], games = [ Game(col, jap, datetime(2018, 6, 19, 12, 0), - where=places[''], + where=places['saransk'], ascore=2, bscore=1), Game(pol, sen, datetime(2018, 6, 19, 15, 0), - where=places[''], + where=places['spartak'], ascore=3, bscore=2), - Game(jap, sen, datetime(2018, 6, 24, 15, 0)), - Game(pol, col, datetime(2018, 6, 24, 18, 0)), + Game(jap, sen, datetime(2018, 6, 24, 15, 0), + where=places['yekaterinburg'], + ), + Game(pol, col, datetime(2018, 6, 24, 18, 0), + where=places['kazan'], + ), - Game(jap, pol, datetime(2018, 6, 28, 14, 0)), - Game(sen, col, datetime(2018, 6, 28, 14, 0)), + Game(jap, pol, datetime(2018, 6, 28, 14, 0), + where=places['volgograd'], + ), + Game(sen, col, datetime(2018, 6, 28, 14, 0), + where=places['samara'], + ), ])) # group winners and seconds From c2bfce87d4b76bb0380bd00256d6a9773896e39b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 22 May 2018 20:39:44 -0400 Subject: [PATCH 264/642] places have dunder str in wc --- karmapi/wc.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index c72a0d8..018abeb 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -189,6 +189,11 @@ def __str__(self): return str(self.teams, self.games) + def reset(self): + """ reset for a new run """ + for game in self.games: + game.reset() + def run(self): """ Run the group """ for game in self.games: @@ -323,7 +328,10 @@ def run(self): class Place: - pass + + def __str__(self): + + return f'{self.name}' class Moscow(Place): """ Final """ From e7af4fb7b95aa01899638508109e83ab9a5b86a9 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 22 May 2018 20:43:05 -0400 Subject: [PATCH 265/642] moving cpr on a little --- karmapi/cpr.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index cd0854c..43af9a4 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -2,6 +2,14 @@ Not, CPR, but Colin P Rourke. Simulate nested spherical waves. + +Things have moved on a little. + +So each ball of nested waves will have a driver at the inside and at the outside too. + +Different clocks at each layer. + +And then outer layers made up of other randomly placed nested spheres. """ import argparse From 2cdb3e3eb24c5e17e276146b6e9e2fb625b7001c Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 22 May 2018 20:48:23 -0400 Subject: [PATCH 266/642] making cpr async with heads and tails? --- karmapi/cpr.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 43af9a4..6826b33 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -10,6 +10,8 @@ Different clocks at each layer. And then outer layers made up of other randomly placed nested spheres. + +But using a universal queue, so let each sphere run in its own co-routine. """ import argparse @@ -36,6 +38,16 @@ def run(self): print(len(self.grid)) class NestedWaves(pigfarm.Yard): + """ Inner and outer spheres + + simulated annealing inspired in between? + + but put it in the tea pot too. + + Lots of tea pots of all kinds. + + and draw slices on the canvas from the yard. + """ def __init__(self, parent, n=10, base=4, inc=4): """ Initialise the thing """ From 810766b4825d617e0e4643caee5c198ced2b8f2b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 22 May 2018 20:51:48 -0400 Subject: [PATCH 267/642] head tail and size for cpr sphere --- karmapi/cpr.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 6826b33..40623c1 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -32,6 +32,10 @@ def __init__(self, size=None): grid.append([random() for x in range(size)]) self.grid = grid + self.size = size + + self.head = False + self.tail = False def run(self): From 5850387deda02822e9c62df447b1da33cb9953a1 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 22 May 2018 21:47:06 -0400 Subject: [PATCH 268/642] more head tail and size time too and sleep --- karmapi/cpr.py | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 40623c1..a129a87 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -23,7 +23,7 @@ class Sphere: - def __init__(self, size=None): + def __init__(self, size=None, head=False, tail=False, t=0): size = size or 4 @@ -34,12 +34,18 @@ def __init__(self, size=None): self.grid = grid self.size = size - self.head = False - self.tail = False + self.head = head + self.tail = tail + self.t = t + + # time moves slower in the inner spheres? + self.sleep = 1 / self.size def run(self): - print(len(self.grid)) + print(self.head, self.tail, self.size, self.t) + + self.t += 1 class NestedWaves(pigfarm.Yard): """ Inner and outer spheres @@ -72,7 +78,19 @@ def build(self): # add a bunch of spheres to the queue for ball in range(self.n): size = self.base + (ball * self.inc) - self.uq.put(Sphere(size)) + + head = True + + if ball: + head = False + + tail = False + if ball == self.n - 1: + tail = True + + sphere = Sphere(size, head=head, tail=tail) + + self.uq.put(sphere) def step_balls(self): From 3f33360132da79658bb42680fbfa17cb0e72fa36 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 23 May 2018 14:12:41 -0400 Subject: [PATCH 269/642] re-working world cup simulator --- karmapi/wc.py | 143 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 133 insertions(+), 10 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 018abeb..1ca3e4c 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -126,15 +126,23 @@ class Team: def __init__(self, name=None, win=None): """ Init the team with no name? """ self.name= name + + self.win = win or 1 / n + + self.reset() + + def reset(self): + self.points = 0 self.yellow = 0 self.red = 0 self.goals = 0 self.against = 0 - self.win = win or 1 / n + # Keep track of games played + self.games = [] + - def __str__(self): msg = f'{self.name} {self.points:3}' @@ -144,6 +152,8 @@ def __str__(self): class Game: + NUMBER = 1 + def __init__(self, a, b, when, where=None, ascore=None, bscore=None): self.a = a @@ -154,21 +164,45 @@ def __init__(self, a, b, when, where=None, ascore=None, bscore=None): self.ascore = ascore self.bscore = bscore + # flag if score came from self.score() + self.nullscore = False + self.number = self.NUMBER + self.NUMBER += 1 + + def reset(self): + """ Reset score if it was random """ + if self.nullscore: + self.ascore = self.bscore = None + def score(self): """ Make up a score """ ascore = random.randint(0, random.randint(0, 5)) bscore = random.randint(0, random.randint(0, 5)) + self.nullscore = True + return self.ascore or ascore, self.bscore or bscore def __str__(self): return f'{self.a.name} {self.b.name} {self.when} {self.where}' + def __cmp__(self, other): + + if self.when == other.when: + return self.number < other.number + + return self.when < other.when + async def run(self): """ Run the game """ pass +class GroupGame(Game): + pass + +class KnockoutGame(Game): + pass class Group: @@ -194,6 +228,9 @@ def reset(self): for game in self.games: game.reset() + for team in self.teams: + team.reset() + def run(self): """ Run the group """ for game in self.games: @@ -205,7 +242,6 @@ def run(self): ascore = game.ascore bscore = game.bscore - print(ascore, bscore) # if either score is None, call score if game.ascore == None or game.bscore == None: ascore, bscore = game.score() @@ -277,9 +313,37 @@ class JeuxSansFrontieres: and badcfehg + So lets set it up so we can do: + + * simulate groups + * do draw for knockout stage + * get games for final stage + """ - def __init__(self, groups, places=None, dates=None): + def __init__(self, groups, places=None, dates=None, now=None): + self.groups = groups + + # places and dates for knockout stage + self.places = places + self.dates = dates + + self.now = now or datetime(2018, 6, 14) + self.step = timedelta(hours=1) + + self.games = curio.PriorityQueue() + + async def load_group_games(self): + """ Put the group games into the game queue """ + for label, group in self.groups.items(): + for game in group.games: + game.group = group + + await self.games.put(game) + + def its_a_knockout(self): """ Set up knockout stage """ + + groups = self.groups key = sorted(groups.keys()) key = list(key) @@ -320,10 +384,69 @@ def __init__(self, groups, places=None, dates=None): for game in self.games: print(game) - def run(self): - """ Run the games """ + + def run_groups(self): + """ Run the group stage """ + # group winners and seconds + winners = {} + seconds = {} + + # print out the games while we are at it + for xx, group in groups.items(): + + print(xx) + + for game in group.games: + print(game.a, game.b, game.when) + + print() + group.run() + print() + + winners[xx] = group.winner() + seconds[xx] = group.second() + + group.table() + + async def run(self): + """ Run the games + + run the group stage + + generate knockout bracket + + run knockout + + collect stats + + reset + + AND/OR: + + Generate events. + """ + + print(self.now) + await self.load_group_games() + + while self.games.qsize(): + + game = self.games.get() + + if game.when < self.now: + print(now, self.game) + + # Run the game + + # Do post processing depending on the type of Game + + else: + await self.games.put(game) + + self.now += self.step + @@ -720,12 +843,12 @@ class Sochi(Place): seconds = {} # print out the games while we are at it -for xx, group in groups.items(): - - print(xx) +for xx, group in groups.items(): + print() + print(f'Group {xx.upper()}') for game in group.games: - print(game.a, game.b, game.when) + print(game.a, game.b, game.when, 'xx') print() group.run() From de455bb16442cddcab27e21030fd1e693cca89c6 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 23 May 2018 15:15:10 -0400 Subject: [PATCH 270/642] sorted group stage fixture list --- karmapi/wc.py | 152 +++++++++++++++++++++++++------------------------- 1 file changed, 75 insertions(+), 77 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 1ca3e4c..169233a 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -174,32 +174,71 @@ def reset(self): if self.nullscore: self.ascore = self.bscore = None + + def __str__(self): + + return f'{self.label} {self.a.name} {self.b.name} {self.when} {self.where}' + + def __eq__(self, other): + + return self.number == other.number + + def __ne__(self, other): + + return self.number != other.number + + def __gt__(self, other): + + return (self.when, self.number) > (other.when, other.number) + + def __le__(self, other): + + return (self.when, self.number) <= (other.when, other.number) + + def __ge__(self, other): + + return (self.when, self.number) >= (other.when, other.number) + def score(self): """ Make up a score """ - ascore = random.randint(0, random.randint(0, 5)) - bscore = random.randint(0, random.randint(0, 5)) - self.nullscore = True + if self.ascore == None or self.bscore == None: + self.ascore = random.randint(0, random.randint(0, 5)) + self.bscore = random.randint(0, random.randint(0, 5)) + + self.nullscore = True - return self.ascore or ascore, self.bscore or bscore + return self.ascore, self.bscore - def __str__(self): + def run(self): + """ Run the game """ + # if either score is None, call score + ascore, bscore = game.score() - return f'{self.a.name} {self.b.name} {self.when} {self.where}' + print(f'{ascore} {bscore}') + print() - def __cmp__(self, other): + a = game.a + b = game.b + + a.goals += ascore + b.goals += bscore - if self.when == other.when: - return self.number < other.number + a.against += bscore + b.against += ascore - return self.when < other.when + if ascore > bscore: + a.points += 3 - async def run(self): - """ Run the game """ - pass + elif bscore > ascore: + b.points += 3 + + else: + a.points += 1 + b.points += 1 + + self.group.table() -class GroupGame(Game): - pass class KnockoutGame(Game): pass @@ -238,35 +277,9 @@ def run(self): print() print (game) print() - - ascore = game.ascore - bscore = game.bscore - - # if either score is None, call score - if game.ascore == None or game.bscore == None: - ascore, bscore = game.score() - print(f'{ascore} {bscore}') - print() - - a = game.a - b = game.b + game.run() - a.goals += ascore - b.goals += bscore - - a.against += bscore - b.against += ascore - - if ascore > bscore: - a.points += 3 - - elif bscore > ascore: - b.points += 3 - - else: - a.points += 1 - b.points += 1 def table(self): """ Show the group table """ @@ -337,6 +350,7 @@ async def load_group_games(self): for label, group in self.groups.items(): for game in group.games: game.group = group + game.label = label.upper() await self.games.put(game) @@ -431,12 +445,12 @@ async def run(self): print(self.now) await self.load_group_games() - while self.games.qsize(): + while not self.games.empty(): - game = self.games.get() + game = await self.games.get() if game.when < self.now: - print(now, self.game) + print(self.now, game) # Run the game @@ -445,7 +459,7 @@ async def run(self): else: await self.games.put(game) - self.now += self.step + self.now += self.step @@ -838,27 +852,6 @@ class Sochi(Place): ), ])) -# group winners and seconds -winners = {} -seconds = {} - -# print out the games while we are at it -for xx, group in groups.items(): - print() - print(f'Group {xx.upper()}') - - for game in group.games: - print(game.a, game.b, game.when, 'xx') - - print() - group.run() - print() - - winners[xx] = group.winner() - seconds[xx] = group.second() - - group.table() - print() print("It's a knock out!") @@ -916,11 +909,13 @@ class Sochi(Place): # add a PI Gui? class MexicanWaves(pigfarm.Yard): - def __init__(self, parent): + def __init__(self, parent, jsf=None): """ Initialise the thing """ super().__init__(parent) + self.jsf = jsf + def step_balls(self): """ do something here """ @@ -934,6 +929,8 @@ async def run(self): self.sleep = 0.05 + await self.jsf.run() + self.set_background() while True: @@ -947,19 +944,20 @@ async def run(self): parser = argparse.ArgumentParser() -parser.add_argument('--pig', action='store_true') +parser.add_argument('--nopig', action='store_true') args = parser.parse_args() -if args.pig: - farm = pigfarm.PigFarm() - - from karmapi.mclock2 import GuidoClock +if args.nopig: + sys.exit() - farm.add(GuidoClock) - farm.add(MexicanWaves) +farm = pigfarm.PigFarm() - # add a random wc time warper? +from karmapi.mclock2 import GuidoClock + +farm.add(GuidoClock) +farm.add(MexicanWaves, dict(jsf=jsf)) - curio.run(farm.run(), with_monitor=True) +# add a random wc time warper? +curio.run(farm.run(), with_monitor=True) From d4bbda1a8317f6c25a9f778547ec05962e478111 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 23 May 2018 19:17:34 -0400 Subject: [PATCH 271/642] too much async in wc, lets add more to games --- karmapi/wc.py | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 169233a..2c545a9 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -113,10 +113,13 @@ import random import argparse +from collections import Counter +from datetime import datetime, timedelta + import curio + from karmapi import pigfarm -from datetime import datetime, timedelta # number of teams n = 32 @@ -422,7 +425,26 @@ def run_groups(self): group.table() - + def do_teams(self): + """ take a look at teams """ + pass + + async def do_places(self): + """ Do stats on places """ + games = [] + + info = Counter() + async for game in self.games: + games.append(game) + + info.update([game.where]) + + # put them back in the queue + for game in games: + self.games.put(game) + + print(self.games.qsize(), 'xxx') + print(info) async def run(self): """ Run the games @@ -445,6 +467,8 @@ async def run(self): print(self.now) await self.load_group_games() + await self.do_places() + while not self.games.empty(): game = await self.games.get() @@ -926,7 +950,7 @@ def draw(self): async def run(self): """ Run the waves """ - + print('running mexican wave') self.sleep = 0.05 await self.jsf.run() From 94cc9085ef89ea81b24b2910f35a4190de6bb606 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 23 May 2018 19:34:45 -0400 Subject: [PATCH 272/642] stinging bats diminishing? --- karmapi/wc.py | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 2c545a9..5ae3795 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -168,16 +168,15 @@ def __init__(self, a, b, when, where=None, ascore=None, bscore=None): self.bscore = bscore # flag if score came from self.score() - self.nullscore = False + self.simulated = (ascore is None) or (bscore is None) self.number = self.NUMBER self.NUMBER += 1 def reset(self): """ Reset score if it was random """ - if self.nullscore: + if self.simulated: self.ascore = self.bscore = None - def __str__(self): return f'{self.label} {self.a.name} {self.b.name} {self.when} {self.where}' @@ -202,6 +201,24 @@ def __ge__(self, other): return (self.when, self.number) >= (other.when, other.number) + async def kick_off(self): + pass + + async def half_time(self): + pass + + async def goal(self, team, who=None, when=None): + pass + + async def yellow(self, team, who=None, when=None): + pass + + async def red(self, team, who=None, when=None): + pass + + async def sub(self, team, off=None, on=None, when=None): + pass + def score(self): """ Make up a score """ @@ -243,8 +260,6 @@ def run(self): self.group.table() -class KnockoutGame(Game): - pass class Group: @@ -435,6 +450,7 @@ async def do_places(self): info = Counter() async for game in self.games: + print(game) games.append(game) info.update([game.where]) @@ -463,12 +479,15 @@ async def run(self): Generate events. """ - + print('jsf: run start') print(self.now) + print('load games') await self.load_group_games() + print('do places') await self.do_places() + print('loop forever?') while not self.games.empty(): game = await self.games.get() @@ -484,6 +503,8 @@ async def run(self): await self.games.put(game) self.now += self.step + print('NOW', self.now) + curio.sleep(0.05) @@ -943,6 +964,7 @@ def __init__(self, parent, jsf=None): def step_balls(self): """ do something here """ + print('mexican wave step_balls') pass def draw(self): @@ -953,7 +975,8 @@ async def run(self): print('running mexican wave') self.sleep = 0.05 - await self.jsf.run() + print('spawning jsf') + await curio.spawn(self.jsf.run()) self.set_background() @@ -961,7 +984,7 @@ async def run(self): self.canvas.delete('all') self.draw() - + self.step_balls() await curio.sleep(self.sleep) From cf9cad157b6205654e9f94f72a1a6434096a3e22 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 23 May 2018 21:01:17 -0400 Subject: [PATCH 273/642] penalties too --- karmapi/wc.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/karmapi/wc.py b/karmapi/wc.py index 5ae3795..68d6fa5 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -207,6 +207,9 @@ async def kick_off(self): async def half_time(self): pass + async def penalties(self): + pass + async def goal(self, team, who=None, when=None): pass From ea3ffedf96a9c5f3a9f09376af02ca892856b788 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 23 May 2018 23:32:55 -0400 Subject: [PATCH 274/642] working towards drawing wc places --- karmapi/wc.py | 43 +++++++++++++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 68d6fa5..143b625 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -449,21 +449,38 @@ def do_teams(self): async def do_places(self): """ Do stats on places """ + print('do_places') games = [] info = Counter() - async for game in self.games: + while not self.games.empty(): + game = await self.games.get() print(game) games.append(game) info.update([game.where]) + #print(info) + + print('done games') + # put them back in the queue for game in games: - self.games.put(game) + await self.games.put(game) print(self.games.qsize(), 'xxx') - print(info) + print(str(info)) + print(info.keys()) + places = [x for x in info.keys()] + + print([x.lat for x in places]) + minlat = min(x.lat for x in places) + maxlat = max(x.lat for x in places) + + minlon = min(x.lon for x in places) + maxlon = max(x.lon for x in places) + + print(minlat, minlon, maxlat, maxlon) async def run(self): """ Run the games @@ -507,9 +524,7 @@ async def run(self): self.now += self.step print('NOW', self.now) - curio.sleep(0.05) - - + await curio.sleep(0.05) class Place: @@ -518,6 +533,10 @@ def __str__(self): return f'{self.name}' + def __repr__(self): + + return str(self) + class Moscow(Place): """ Final """ @@ -537,15 +556,15 @@ class StPetersberg(Place): """ Place of many names """ name = 'St Petersberg' - lat = None - lon = None + lat = 59 + (58 / 60) + lon = 30 + (14 / 60) class Volgograd(Place): """ Down south """ name = 'Volgograd' - lat = None - lon = None + lat = 48 + (45 / 60) + lon = 44 + (33 / 60) class Novgorod(Place): """ Central """ @@ -967,7 +986,7 @@ def __init__(self, parent, jsf=None): def step_balls(self): """ do something here """ - print('mexican wave step_balls') + #print('mexican wave step_balls') pass def draw(self): @@ -979,7 +998,7 @@ async def run(self): self.sleep = 0.05 print('spawning jsf') - await curio.spawn(self.jsf.run()) + jsf = await curio.spawn(self.jsf.run()) self.set_background() From 7cae74269559e6d47e092166bffaeccaac04f576 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 24 May 2018 13:32:22 -0400 Subject: [PATCH 275/642] mexican waves for the wc venues --- karmapi/wc.py | 68 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 60 insertions(+), 8 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 143b625..2562167 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -115,6 +115,7 @@ import argparse from collections import Counter from datetime import datetime, timedelta +import sys import curio @@ -480,6 +481,7 @@ async def do_places(self): minlon = min(x.lon for x in places) maxlon = max(x.lon for x in places) + # need to add padding to make grid print(minlat, minlon, maxlat, maxlon) async def run(self): @@ -523,8 +525,7 @@ async def run(self): await self.games.put(game) self.now += self.step - print('NOW', self.now) - await curio.sleep(0.05) + await curio.sleep(0.01) class Place: @@ -647,7 +648,6 @@ class Sochi(Place): rostovondon=RostovOnDon(), sochi=Sochi(), ) -places[''] = '???' # Group A rus = Team('RUS') @@ -976,18 +976,70 @@ class Sochi(Place): # add a PI Gui? class MexicanWaves(pigfarm.Yard): - def __init__(self, parent, jsf=None): + def __init__(self, parent, jsf=None, venues=None): """ Initialise the thing """ super().__init__(parent) self.jsf = jsf + self.scan_venues(venues) + def scan_venues(self, venues): + """ Set the lat lon bounds for the canvas """ + self.places = places = list(venues.values()) + + minlat = min(x.lat for x in places) + maxlat = max(x.lat for x in places) + + minlon = min(x.lon for x in places) + maxlon = max(x.lon for x in places) + + # need to add padding to make grid + print("BOUNDS:") + print(minlat, minlon) + print(maxlat, maxlon) + + height = maxlat - minlat + width = maxlon - minlon + + wpad = width / 8 + hpad = height / 8 + + print(width, wpad) + print(height, hpad) + + self.xx = minlon - wpad + self.yy = minlat - hpad + + self.xscale = width + (2 * wpad) + self.yscale = height + (2 * hpad) + + print(self.xx, self.yy) + print(self.xscale, self.yscale) + + def latlon2xy(self, place): + """ Convert lat lon to yard coordinates """ + lat = place.lat + lon = place.lon + + xx = int(((lon - self.xx) / self.xscale) * self.width) + yy = self.height - int(((lat - self.yy) / self.yscale) * self.height) + + return xx, yy + + def step_balls(self): """ do something here """ - #print('mexican wave step_balls') - pass + print('mexican wave step_balls') + for place in self.places: + print(place) + xx, yy = self.latlon2xy(place) + size = 5 + print(self.width, self.height, xx, yy) + self.canvas.create_oval(xx-size, yy-size, xx+size, yy+size, fill='red') + self.canvas.create_text((xx + 20, yy), text=place.name, fill='yellow') + #sys.exit() def draw(self): pass @@ -998,7 +1050,7 @@ async def run(self): self.sleep = 0.05 print('spawning jsf') - jsf = await curio.spawn(self.jsf.run()) + jsf = await curio.spawn(self.jsf.run) self.set_background() @@ -1024,7 +1076,7 @@ async def run(self): from karmapi.mclock2 import GuidoClock farm.add(GuidoClock) -farm.add(MexicanWaves, dict(jsf=jsf)) +farm.add(MexicanWaves, dict(jsf=jsf, venues=places)) # add a random wc time warper? curio.run(farm.run(), with_monitor=True) From 94f085b137d5a25dad9472e54961fe131ffbb015 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 24 May 2018 14:32:50 -0400 Subject: [PATCH 276/642] working on getting teams to show --- karmapi/wc.py | 87 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 82 insertions(+), 5 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 2562167..40f8401 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -113,7 +113,7 @@ import random import argparse -from collections import Counter +from collections import Counter, defaultdict from datetime import datetime, timedelta import sys @@ -129,8 +129,12 @@ class Team: def __init__(self, name=None, win=None): """ Init the team with no name? """ - self.name= name + self.name = name + # default location: North Pole + self.lat = 90 + self.lon = 0 + self.win = win or 1 / n self.reset() @@ -143,9 +147,33 @@ def reset(self): self.goals = 0 self.against = 0 - # Keep track of games played + # Keep track of games played/to be played? self.games = [] + def where(self, when): + """ Where is the team? """ + + last_game = None + next_game = None + for game in self.games: + if game.when < when: + last_game = game + else: + next_game = game + break + + if last_game is None and next_game is None: + # return a defualt? + return self.lat, self.lon + + # if one is missing, use the other + last_game = last_game or next_game + next_game = next_game or last_game + + # Interpolate based on time + self.lat, self.lon = warp(last_game, next_game, when) + + return self.lat, self.lon def __str__(self): @@ -154,6 +182,27 @@ def __str__(self): return msg +def warp(a, b, when): + """ Interpolate between a and b based on time """ + + delta_t = (b.when - a.when).total_seconds() + + if delta_t == 0: + return a.lat, a.lon + + delta_w = (when - a.when).total_seconds() + + frac = delta_w / delta_t + + lat = a.lat + lon = b.lon + + lat += frac * (b.lat - a.lat) + lon += frac * (b.lon - a.lon) + + return lat, lon + + class Game: NUMBER = 1 @@ -448,6 +497,12 @@ def do_teams(self): """ take a look at teams """ pass + def generate_teams(self): + """ Generate teams """ + for group in self.groups.values(): + for team in group.teams: + yield team + async def do_places(self): """ Do stats on places """ print('do_places') @@ -1033,14 +1088,36 @@ def step_balls(self): """ do something here """ print('mexican wave step_balls') for place in self.places: - print(place) + #print(place) xx, yy = self.latlon2xy(place) size = 5 - print(self.width, self.height, xx, yy) + #print(self.width, self.height, xx, yy) self.canvas.create_oval(xx-size, yy-size, xx+size, yy+size, fill='red') self.canvas.create_text((xx + 20, yy), text=place.name, fill='yellow') #sys.exit() + print('done places') + locations = defaultdict(list) + + for team in jsf.generate_teams(): + team.where(datetime.now()) + xx, yy = self.latlon2xy(team) + + locations[(xx, yy)].append(team) + + print(locations) + # Now draw the things + for key in locations.keys(): + print('KEEEEY', key) + xx, yy = key + + for team in locations[key]: + print(team) + self.canvas.create_text( + (xx, yy+30), text=team.name, fill='green') + + + def draw(self): pass From a67ae3a2e9ce93fab5f12d634c285a1c3397da97 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 24 May 2018 14:58:02 -0400 Subject: [PATCH 277/642] teams showing up in the mexican wave --- karmapi/wc.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 40f8401..102f192 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -188,17 +188,20 @@ def warp(a, b, when): delta_t = (b.when - a.when).total_seconds() if delta_t == 0: - return a.lat, a.lon + return a.where.lat, a.where.lon delta_w = (when - a.when).total_seconds() frac = delta_w / delta_t - lat = a.lat - lon = b.lon + aa = a.where + bb = b.where + + lat = aa.lat + lon = bb.lon - lat += frac * (b.lat - a.lat) - lon += frac * (b.lon - a.lon) + lat += frac * (bb.lat - aa.lat) + lon += frac * (bb.lon - aa.lon) return lat, lon @@ -514,6 +517,8 @@ async def do_places(self): print(game) games.append(game) + game.a.games.append(game) + game.b.games.append(game) info.update([game.where]) #print(info) @@ -1110,11 +1115,12 @@ def step_balls(self): for key in locations.keys(): print('KEEEEY', key) xx, yy = key - + yoff = 30 for team in locations[key]: print(team) self.canvas.create_text( - (xx, yy+30), text=team.name, fill='green') + (xx, yy+yoff), text=team.name, fill='green') + yoff += 30 From 20520b4ae62de4fba2f6f89324c7a301dad06ab4 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 24 May 2018 15:07:43 -0400 Subject: [PATCH 278/642] reset with r for mexican waves --- karmapi/wc.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 102f192..a7fc0c3 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -1043,8 +1043,12 @@ def __init__(self, parent, jsf=None, venues=None): self.jsf = jsf + self.when = datetime(2018, 6, 14) + self.scan_venues(venues) + self.add_event_map('r', self.reset) + def scan_venues(self, venues): """ Set the lat lon bounds for the canvas """ self.places = places = list(venues.values()) @@ -1099,21 +1103,18 @@ def step_balls(self): #print(self.width, self.height, xx, yy) self.canvas.create_oval(xx-size, yy-size, xx+size, yy+size, fill='red') self.canvas.create_text((xx + 20, yy), text=place.name, fill='yellow') - #sys.exit() print('done places') locations = defaultdict(list) for team in jsf.generate_teams(): - team.where(datetime.now()) + team.where(self.when) xx, yy = self.latlon2xy(team) locations[(xx, yy)].append(team) - print(locations) # Now draw the things for key in locations.keys(): - print('KEEEEY', key) xx, yy = key yoff = 30 for team in locations[key]: @@ -1122,11 +1123,15 @@ def step_balls(self): (xx, yy+yoff), text=team.name, fill='green') yoff += 30 - + self.when += timedelta(hours=1) def draw(self): pass + async def reset(self): + """ Reset timer """ + self.when = datetime(2018, 6, 14) + async def run(self): """ Run the waves """ print('running mexican wave') From 8e92ee41ce0b48114bf410d8de85199295069f4b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 24 May 2018 16:02:21 -0400 Subject: [PATCH 279/642] fix times and locations and nudge spartak a little --- karmapi/wc.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index a7fc0c3..83727a5 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -169,6 +169,7 @@ def where(self, when): # if one is missing, use the other last_game = last_game or next_game next_game = next_game or last_game + print(self, last_game, next_game) # Interpolate based on time self.lat, self.lon = warp(last_game, next_game, when) @@ -198,7 +199,7 @@ def warp(a, b, when): bb = b.where lat = aa.lat - lon = bb.lon + lon = aa.lon lat += frac * (bb.lat - aa.lat) lon += frac * (bb.lon - aa.lon) @@ -585,7 +586,7 @@ async def run(self): await self.games.put(game) self.now += self.step - await curio.sleep(0.01) + await curio.sleep() class Place: @@ -609,8 +610,11 @@ class Spartak(Place): """ Spartak Moscow """ name = 'Moscow Oktkrytiye' - lat = 55 + (49 / 60) - lon = 37 + (26 / 60) + lat = 56 + (49 / 60) + lon = 34 + (26 / 60) + + xlat = 55 + (49 / 60) + xlon = 37 + (26 / 60) class StPetersberg(Place): @@ -631,8 +635,8 @@ class Novgorod(Place): """ Central """ name = 'Nizhny Novgorod' - lat = 48 + (44 / 60) - lon = 44 + (33 / 60) + lat = 56 + (20 / 60) + lon = 43 + (57 / 60) class Kaliningrad(Place): """ North West port """ @@ -779,10 +783,10 @@ class Sochi(Place): ), - Game(urg, rus, datetime(2018, 6, 19, 14, 0), + Game(urg, rus, datetime(2018, 6, 25, 14, 0), where=places['samara'], ), - Game(sau, egy, datetime(2018, 6, 19, 14, 0), + Game(sau, egy, datetime(2018, 6, 25, 14, 0), where=places['volgograd'], ), ]), @@ -1118,7 +1122,7 @@ def step_balls(self): xx, yy = key yoff = 30 for team in locations[key]: - print(team) + print(team, team.lat, team.lon, xx, yy) self.canvas.create_text( (xx, yy+yoff), text=team.name, fill='green') yoff += 30 @@ -1135,7 +1139,6 @@ async def reset(self): async def run(self): """ Run the waves """ print('running mexican wave') - self.sleep = 0.05 print('spawning jsf') jsf = await curio.spawn(self.jsf.run) From 516b459bd85a85210448aba73a2b7187f9a49ec5 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 24 May 2018 16:45:39 -0400 Subject: [PATCH 280/642] teams moving around.. now what abou the games? --- karmapi/wc.py | 45 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 83727a5..e4234a4 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -579,14 +579,14 @@ async def run(self): print(self.now, game) # Run the game - + await game.run() # Do post processing depending on the type of Game else: await self.games.put(game) self.now += self.step - await curio.sleep() + await curio.sleep(0) class Place: @@ -1102,12 +1102,12 @@ def step_balls(self): print('mexican wave step_balls') for place in self.places: #print(place) - xx, yy = self.latlon2xy(place) - size = 5 #print(self.width, self.height, xx, yy) - self.canvas.create_oval(xx-size, yy-size, xx+size, yy+size, fill='red') - self.canvas.create_text((xx + 20, yy), text=place.name, fill='yellow') + size = 5 + self.ball(place, fill='red', size=5) + self.message(place.name, place, yoff=-20, fill='yellow') + print('done places') locations = defaultdict(list) @@ -1123,8 +1123,9 @@ def step_balls(self): yoff = 30 for team in locations[key]: print(team, team.lat, team.lon, xx, yy) - self.canvas.create_text( - (xx, yy+yoff), text=team.name, fill='green') + + self.message(team.name, team, yoff=yoff, fill='green') + yoff += 30 self.when += timedelta(hours=1) @@ -1136,6 +1137,32 @@ async def reset(self): """ Reset timer """ self.when = datetime(2018, 6, 14) + async def score_flash(self): + + while True: + event = await self.jsf.events.get() + + + print(event) + + def message(self, message, place, fill='red', size=5, xoff=0, yoff=0): + """ Message from a place """ + + xx, yy = self.latlon2xy(place) + + self.canvas.create_text((xx + xoff, yy + yoff), text=message, fill=fill) + + + def ball(self, place, fill='red', size=5, xoff=0, yoff=0): + """ Message from a place """ + + xx, yy = self.latlon2xy(place) + + self.canvas.create_oval( + xx+xoff-size, + yy+yoff-size, + xx+xoff+size, yy+yoff+size, fill='red') + async def run(self): """ Run the waves """ print('running mexican wave') @@ -1143,6 +1170,8 @@ async def run(self): print('spawning jsf') jsf = await curio.spawn(self.jsf.run) + score_flashes = await curio.spawn(self.score_flash) + self.set_background() while True: From be8712387e46ea6cd98546d5373b495e12e1d3f6 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 25 May 2018 12:21:14 -0400 Subject: [PATCH 281/642] wc bans f-strings due to py 3.5 on pi --- karmapi/wc.py | 69 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 46 insertions(+), 23 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index e4234a4..edab5bb 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -169,7 +169,6 @@ def where(self, when): # if one is missing, use the other last_game = last_game or next_game next_game = next_game or last_game - print(self, last_game, next_game) # Interpolate based on time self.lat, self.lon = warp(last_game, next_game, when) @@ -178,8 +177,26 @@ def where(self, when): def __str__(self): - msg = f'{self.name} {self.points:3}' - msg +=f'{self.goals - self.against:4} {self.goals:4} {self.against:4}' + return self.name + + + def stats(self): + + return dict( + points = self.points, + goals = self.goals, + against = self.against, + goal_delta = self.goals - self.against, + red = self.red, + yellow = self.yellow) + + def statto(self): + """ Return line of stats for the team """ + + stats = self.stats() + msg = "%s" % self.name + msg += " {points:4d} {goal_delta:4d}".format(stats) + msg += " {goals:4d} {against:4d}".format(stats) return msg @@ -233,7 +250,12 @@ def reset(self): def __str__(self): - return f'{self.label} {self.a.name} {self.b.name} {self.when} {self.where}' + return ( + str(self.label) + ' ' + + str(self.a.name) + ' v ' + + str(self.b.name) + ' ' + + str(self.when) + ' ' + + str(self.where)) def __eq__(self, other): @@ -287,16 +309,14 @@ def score(self): return self.ascore, self.bscore - def run(self): + async def run(self, events): """ Run the game """ - # if either score is None, call score - ascore, bscore = game.score() + ascore, bscore = self.score() - print(f'{ascore} {bscore}') - print() + print(ascore, bscore) - a = game.a - b = game.b + a = self.a + b = self.b a.goals += ascore b.goals += bscore @@ -314,8 +334,9 @@ def run(self): a.points += 1 b.points += 1 - self.group.table() - + msg = a.name + ' ' + str(ascore) + ' ' + str(bscore) + ' ' + b.name + + await events.put((self.where, msg)) class Group: @@ -362,6 +383,7 @@ def table(self): for team in teams: print(team) + print(team.statto) def get_table(self): @@ -419,6 +441,7 @@ def __init__(self, groups, places=None, dates=None, now=None): self.step = timedelta(hours=1) self.games = curio.PriorityQueue() + self.events = curio.UniversalQueue() async def load_group_games(self): """ Put the group games into the game queue """ @@ -579,13 +602,12 @@ async def run(self): print(self.now, game) # Run the game - await game.run() + await game.run(self.events) # Do post processing depending on the type of Game else: await self.games.put(game) - self.now += self.step await curio.sleep(0) @@ -593,7 +615,7 @@ class Place: def __str__(self): - return f'{self.name}' + return self.name def __repr__(self): @@ -1099,7 +1121,7 @@ def latlon2xy(self, place): def step_balls(self): """ do something here """ - print('mexican wave step_balls') + #print('mexican wave step_balls') for place in self.places: #print(place) #print(self.width, self.height, xx, yy) @@ -1108,7 +1130,7 @@ def step_balls(self): self.message(place.name, place, yoff=-20, fill='yellow') - print('done places') + #print('done places') locations = defaultdict(list) for team in jsf.generate_teams(): @@ -1122,14 +1144,13 @@ def step_balls(self): xx, yy = key yoff = 30 for team in locations[key]: - print(team, team.lat, team.lon, xx, yy) - self.message(team.name, team, yoff=yoff, fill='green') yoff += 30 self.when += timedelta(hours=1) + def draw(self): pass @@ -1140,10 +1161,10 @@ async def reset(self): async def score_flash(self): while True: - event = await self.jsf.events.get() + place, message = await self.jsf.events.get() - - print(event) + self.message(message, place) + print(place, message) def message(self, message, place, fill='red', size=5, xoff=0, yoff=0): """ Message from a place """ @@ -1180,6 +1201,8 @@ async def run(self): self.draw() self.step_balls() + + self.jsf.now = self.when await curio.sleep(self.sleep) From f6e39f6cf3b79af0ae82b1f0e6773f8307cde73b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 25 May 2018 12:28:20 -0400 Subject: [PATCH 282/642] pig farm caught flouting wc f-string ban --- karmapi/pigfarm.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/karmapi/pigfarm.py b/karmapi/pigfarm.py index 534b1d6..b6e3cba 100644 --- a/karmapi/pigfarm.py +++ b/karmapi/pigfarm.py @@ -409,7 +409,7 @@ def load_image(self, name): height /= wscale width /= wscale - print(f'load {width} {height}') + print(width, height) image = image.resize((int(width), int(height))).convert('RGBA') @@ -671,7 +671,7 @@ def draw_table( acell = tab._cells[0, 0] print('fontsize', acell.get_fontsize()) - title = title or f'table location {loc}' + title = title or 'table location ' + str(loc) self.axes.set_title(title) self.axes.set_axis_off() @@ -807,11 +807,11 @@ def make_timestamp_index(frame): return frame def filter_frame(frame, start, end): - + """ FIXME - looks weird and used f-strings """ d = start - start = f'{d.year}-{d.month:02}-{d.day:02} {d.hour:02}:{d.minute:02}:{d.second:02}' + #start = f'{d.year}-{d.month:02}-{d.day:02} {d.hour:02}:{d.minute:02}:{d.second:02}' d = end - end = f'{d.year}-{d.month:02}-{d.day:02} {d.hour:02}:{d.minute:02}:{d.second:02}' + #end = f'{d.year}-{d.month:02}-{d.day:02} {d.hour:02}:{d.minute:02}:{d.second:02}' return frame[start:end] From 2eed42922f489b611ff76a2902902916d5219911 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 25 May 2018 12:30:31 -0400 Subject: [PATCH 283/642] wc fstring violation in base too --- karmapi/base.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/karmapi/base.py b/karmapi/base.py index b1d12d6..0b2cbbc 100644 --- a/karmapi/base.py +++ b/karmapi/base.py @@ -512,7 +512,8 @@ def show(self): get_value = itemgetter(1) for tag, ttime in sorted(self.tt.items(), key=get_value): - print(f'{ttime:8.3f} {tag}') + print("%8.3f %s" % (ttime, tag)) + def parse_date(date): """ Parse a date """ From af88b1ebed2112205b4f957752df28b76a652856 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 25 May 2018 12:32:34 -0400 Subject: [PATCH 284/642] piglets sneaking in f-strings too --- karmapi/piglet.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karmapi/piglet.py b/karmapi/piglet.py index 85c0797..77d9056 100644 --- a/karmapi/piglet.py +++ b/karmapi/piglet.py @@ -453,7 +453,7 @@ def draw_table(self): cellEdgeColours=colours, loc=loc) #loc='upper_center') - self.axes.set_title(f'table location {loc}') + self.axes.set_title('table location ' + str(loc)) self.axes.set_axis_off() From 50c00de54c9742008093667fd15fc67cf64d025e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 25 May 2018 13:52:24 -0400 Subject: [PATCH 285/642] world cup score flashes --- karmapi/wc.py | 91 ++++++++++++++++++--------------------------------- 1 file changed, 32 insertions(+), 59 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index edab5bb..6b079ef 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -450,6 +450,9 @@ async def load_group_games(self): game.group = group game.label = label.upper() + game.a.games.append(game) + game.b.games.append(game) + await self.games.put(game) def its_a_knockout(self): @@ -520,54 +523,12 @@ def run_groups(self): group.table() - def do_teams(self): - """ take a look at teams """ - pass - def generate_teams(self): """ Generate teams """ for group in self.groups.values(): for team in group.teams: yield team - async def do_places(self): - """ Do stats on places """ - print('do_places') - games = [] - - info = Counter() - while not self.games.empty(): - game = await self.games.get() - print(game) - games.append(game) - - game.a.games.append(game) - game.b.games.append(game) - info.update([game.where]) - - #print(info) - - print('done games') - - # put them back in the queue - for game in games: - await self.games.put(game) - - print(self.games.qsize(), 'xxx') - print(str(info)) - print(info.keys()) - places = [x for x in info.keys()] - - print([x.lat for x in places]) - minlat = min(x.lat for x in places) - maxlat = max(x.lat for x in places) - - minlon = min(x.lon for x in places) - maxlon = max(x.lon for x in places) - - # need to add padding to make grid - print(minlat, minlon, maxlat, maxlon) - async def run(self): """ Run the games @@ -590,9 +551,6 @@ async def run(self): print('load games') await self.load_group_games() - print('do places') - await self.do_places() - print('loop forever?') while not self.games.empty(): @@ -632,7 +590,7 @@ class Spartak(Place): """ Spartak Moscow """ name = 'Moscow Oktkrytiye' - lat = 56 + (49 / 60) + lat = 57 + (49 / 60) lon = 34 + (26 / 60) xlat = 55 + (49 / 60) @@ -1070,10 +1028,22 @@ def __init__(self, parent, jsf=None, venues=None): self.jsf = jsf self.when = datetime(2018, 6, 14) + self.delta_t = 1. + self.messages = [] self.scan_venues(venues) self.add_event_map('r', self.reset) + self.add_event_map('s', self.slower) + self.add_event_map('w', self.faster) + + async def slower(self): + """ Go slower """ + self.delta_t /= 2 + + async def faster(self): + """ Go faster """ + self.delta_t *= 2 def scan_venues(self, venues): """ Set the lat lon bounds for the canvas """ @@ -1085,28 +1055,19 @@ def scan_venues(self, venues): minlon = min(x.lon for x in places) maxlon = max(x.lon for x in places) - # need to add padding to make grid - print("BOUNDS:") - print(minlat, minlon) - print(maxlat, maxlon) - height = maxlat - minlat width = maxlon - minlon wpad = width / 8 hpad = height / 8 - print(width, wpad) - print(height, hpad) - + # need to add padding to make grid self.xx = minlon - wpad self.yy = minlat - hpad self.xscale = width + (2 * wpad) self.yscale = height + (2 * hpad) - print(self.xx, self.yy) - print(self.xscale, self.yscale) def latlon2xy(self, place): """ Convert lat lon to yard coordinates """ @@ -1147,8 +1108,10 @@ def step_balls(self): self.message(team.name, team, yoff=yoff, fill='green') yoff += 30 + + self.show_score_flashes() - self.when += timedelta(hours=1) + self.when += timedelta(hours=self.delta_t) def draw(self): @@ -1162,10 +1125,20 @@ async def score_flash(self): while True: place, message = await self.jsf.events.get() - - self.message(message, place) + + self.messages.append([self.when, place, message]) print(place, message) + def show_score_flashes(self): + """ Show the score flashes """ + keep = [] + for when, where, what in self.messages: + if self.when < when + timedelta(hours=24): + self.message(what, where, yoff=-90) + keep.append([when, where, what]) + self.messages = keep + + def message(self, message, place, fill='red', size=5, xoff=0, yoff=0): """ Message from a place """ From 4181cd1b1bed2dd96c0170e636a63327e34a9268 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 25 May 2018 14:57:46 -0400 Subject: [PATCH 286/642] starting to animate games reset breakage --- karmapi/wc.py | 78 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 74 insertions(+), 4 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 6b079ef..b7ade01 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -124,6 +124,7 @@ # number of teams n = 32 +squadsize = 23 class Team: @@ -139,6 +140,7 @@ def __init__(self, name=None, win=None): self.reset() + def reset(self): self.points = 0 @@ -150,6 +152,15 @@ def reset(self): # Keep track of games played/to be played? self.games = [] + self.load_squad() + + def load_squad(self): + """ Numbers 1 to sqadsize """ + self.squad = defaultdict(int) + + for player in range(squadsize): + self.squad[player] = Player(player + 1) + def where(self, when): """ Where is the team? """ @@ -176,8 +187,8 @@ def where(self, when): return self.lat, self.lon def __str__(self): - - return self.name + + return self.name def stats(self): @@ -200,6 +211,44 @@ def statto(self): return msg +class Player: + """ A player of class + + Tony Currie, Kyle Walker, Harry Maguire + """ + + def __init__(self, number): + + self.goals = [] + self.red = [] + self.yellow = [] + self.number = number + +class Goal: + + def __init__(self, team, who=None, when=None, game=None, penalty=False): + + self.who = who + self.when = when + self.game = game + self.penalty = penalty + +class Penalty: + """ Penalty in a shoot out + + which: which penalty: 1, 2, 3 etc + """ + def __init__(self, team, who=None, which=None, game=None, score=True): + + self.who = who + self.when = when + self.game = game + self.penalty = penalty + +class ShootOut: + """ Class to run a penalty shoot out """ + pass + def warp(a, b, when): """ Interpolate between a and b based on time """ @@ -278,11 +327,26 @@ def __ge__(self, other): return (self.when, self.number) >= (other.when, other.number) async def kick_off(self): - pass + return 0, 0 async def half_time(self): pass + async def second_half(self): + pass + + async def full_time(self): + pass + + async def extra_time(self): + pass + + async def extra_half_time(self): + pass + + async def extra_full_time(self): + pass + async def penalties(self): pass @@ -311,7 +375,10 @@ def score(self): async def run(self, events): """ Run the game """ - ascore, bscore = self.score() + + ascore, bscore = await self.kick_off() + + # ascore, bscore = self.score() print(ascore, bscore) @@ -1121,6 +1188,9 @@ async def reset(self): """ Reset timer """ self.when = datetime(2018, 6, 14) + self.jsf.reset() + self.jsf.load_group_games() + async def score_flash(self): while True: From a79b6496bf6619d4cae5fee8b3582596181f359e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 25 May 2018 15:09:59 -0400 Subject: [PATCH 287/642] reset behaving better but no goals :( --- karmapi/wc.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index b7ade01..f4d12d2 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -513,6 +513,7 @@ def __init__(self, groups, places=None, dates=None, now=None): async def load_group_games(self): """ Put the group games into the game queue """ for label, group in self.groups.items(): + group.reset() for game in group.games: game.group = group game.label = label.upper() @@ -596,6 +597,11 @@ def generate_teams(self): for team in group.teams: yield team + async def reset(self): + """ Reset things to start again """ + await self.load_group_games() + + async def run(self): """ Run the games @@ -616,7 +622,7 @@ async def run(self): print('jsf: run start') print(self.now) print('load games') - await self.load_group_games() + await self.reset() print('loop forever?') while not self.games.empty(): @@ -1094,9 +1100,10 @@ def __init__(self, parent, jsf=None, venues=None): self.jsf = jsf + self.messages = [] + self.when = datetime(2018, 6, 14) self.delta_t = 1. - self.messages = [] self.scan_venues(venues) @@ -1189,7 +1196,9 @@ async def reset(self): self.when = datetime(2018, 6, 14) self.jsf.reset() - self.jsf.load_group_games() + await self.jsf.load_group_games() + + self.messages = [] async def score_flash(self): From 1abf913447f5dfe1da44acf09e663af2cf9a6a8d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 25 May 2018 16:34:48 -0400 Subject: [PATCH 288/642] group tables going round in circles --- karmapi/wc.py | 63 +++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 48 insertions(+), 15 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index f4d12d2..0da5a82 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -205,9 +205,10 @@ def statto(self): """ Return line of stats for the team """ stats = self.stats() + print(stats) msg = "%s" % self.name - msg += " {points:4d} {goal_delta:4d}".format(stats) - msg += " {goals:4d} {against:4d}".format(stats) + msg += " {points:4d} {goal_delta:4d}".format(**stats) + msg += " {goals:4d} {against:4d}".format(**stats) return msg @@ -289,8 +290,9 @@ def __init__(self, a, b, when, where=None, ascore=None, bscore=None): # flag if score came from self.score() self.simulated = (ascore is None) or (bscore is None) - self.number = self.NUMBER - self.NUMBER += 1 + self.number = Game.NUMBER + Game.NUMBER += 1 + def reset(self): """ Reset score if it was random """ @@ -327,6 +329,8 @@ def __ge__(self, other): return (self.when, self.number) >= (other.when, other.number) async def kick_off(self): + + await self.full_time() return 0, 0 async def half_time(self): @@ -336,7 +340,25 @@ async def second_half(self): pass async def full_time(self): - pass + + position = [ + [.1, .65], + [.3, .65], + [.1, .85], + [.3, .85]] + + print('full time', self.number) + xx, yy = position[self.number % len(position)] + + msg = '' + for team in self.group.get_table(): + + await self.events.put(dict( + msg=team.statto(), + xx=xx, + yy=yy, + fill='green')) + yy -= 0.05 async def extra_time(self): pass @@ -376,6 +398,7 @@ def score(self): async def run(self, events): """ Run the game """ + self.events = events ascore, bscore = await self.kick_off() # ascore, bscore = self.score() @@ -403,7 +426,7 @@ async def run(self, events): msg = a.name + ' ' + str(ascore) + ' ' + str(bscore) + ' ' + b.name - await events.put((self.where, msg)) + await events.put(dict(where=self.where, msg=msg, yoff=-90)) class Group: @@ -513,6 +536,7 @@ def __init__(self, groups, places=None, dates=None, now=None): async def load_group_games(self): """ Put the group games into the game queue """ for label, group in self.groups.items(): + group.name = label group.reset() for game in group.games: game.group = group @@ -1203,27 +1227,36 @@ async def reset(self): async def score_flash(self): while True: - place, message = await self.jsf.events.get() + info = await self.jsf.events.get() + + info['when'] = self.when - self.messages.append([self.when, place, message]) - print(place, message) + self.messages.append(info) + print(info) def show_score_flashes(self): """ Show the score flashes """ keep = [] - for when, where, what in self.messages: + for info in self.messages: + when = info['when'] + if self.when < when + timedelta(hours=24): - self.message(what, where, yoff=-90) - keep.append([when, where, what]) + self.message(**info) + keep.append(info) self.messages = keep - def message(self, message, place, fill='red', size=5, xoff=0, yoff=0): + def message(self, msg=None, where=None, fill='red', size=5, xoff=0, yoff=0, + xx=None, yy=None, **kwargs): """ Message from a place """ - xx, yy = self.latlon2xy(place) + if xx is None or yy is None: + xx, yy = self.latlon2xy(where) + else: + xx *= self.width + yy *= self.height - self.canvas.create_text((xx + xoff, yy + yoff), text=message, fill=fill) + self.canvas.create_text((xx + xoff, yy + yoff), text=msg, fill=fill) def ball(self, place, fill='red', size=5, xoff=0, yoff=0): From 14f0b745231bfa99d626efe085cada52f73f531c Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 25 May 2018 18:19:14 -0400 Subject: [PATCH 289/642] tables and goals and more buglets --- karmapi/wc.py | 122 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 86 insertions(+), 36 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 0da5a82..b32aaa5 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -111,7 +111,7 @@ """ -import random +from random import random, randint import argparse from collections import Counter, defaultdict from datetime import datetime, timedelta @@ -329,9 +329,40 @@ def __ge__(self, other): return (self.when, self.number) >= (other.when, other.number) async def kick_off(self): + """ Game has kicked off """ + minutes = 45 + randint(0, 7) - await self.full_time() - return 0, 0 + for minute in range(minutes): + await self.run_minute() + + #await self.half_time() + + + async def run_minute(self): + + yellow_per_minute = 1 / 30 + red_per_minute = 1 / 150 + goals_per_minute = 1 / 30 + + # score a goal? + if random() < goals_per_minute: + # who scored + if random() <= 0.5: + self.ascore += 1 + else: + self.bscore += 1 + + await self.flash() + + if random() < yellow_per_minute: + # yellow card? + pass + + if random() < red_per_minute: + # red card? + pass + + return self.ascore, self.bscore async def half_time(self): pass @@ -340,25 +371,7 @@ async def second_half(self): pass async def full_time(self): - - position = [ - [.1, .65], - [.3, .65], - [.1, .85], - [.3, .85]] - - print('full time', self.number) - xx, yy = position[self.number % len(position)] - - msg = '' - for team in self.group.get_table(): - - await self.events.put(dict( - msg=team.statto(), - xx=xx, - yy=yy, - fill='green')) - yy -= 0.05 + pass async def extra_time(self): pass @@ -388,8 +401,8 @@ def score(self): """ Make up a score """ if self.ascore == None or self.bscore == None: - self.ascore = random.randint(0, random.randint(0, 5)) - self.bscore = random.randint(0, random.randint(0, 5)) + self.ascore = randint(0, randint(0, 5)) + self.bscore = randint(0, randint(0, 5)) self.nullscore = True @@ -399,22 +412,18 @@ async def run(self, events): """ Run the game """ self.events = events - ascore, bscore = await self.kick_off() - - # ascore, bscore = self.score() - - print(ascore, bscore) + await self.kick_off() a = self.a b = self.b - a.goals += ascore - b.goals += bscore + a.goals += self.ascore + b.goals += self.bscore - a.against += bscore - b.against += ascore + a.against += self.bscore + b.against += self.ascore - if ascore > bscore: + if self.ascore > self.bscore: a.points += 3 elif bscore > ascore: @@ -424,9 +433,18 @@ async def run(self, events): a.points += 1 b.points += 1 + await self.flash() + + async def flash(self): + + a = self.a + b = self.b + ascore = self.ascore + bscore = self.bscore + msg = a.name + ' ' + str(ascore) + ' ' + str(bscore) + ' ' + b.name - await events.put(dict(where=self.where, msg=msg, yoff=-90)) + await self.events.put(dict(where=self.where, msg=msg, yoff=-90)) class Group: @@ -625,7 +643,6 @@ async def reset(self): """ Reset things to start again """ await self.load_group_games() - async def run(self): """ Run the games @@ -1208,6 +1225,8 @@ def step_balls(self): yoff += 30 self.show_score_flashes() + + self.show_tables() self.when += timedelta(hours=self.delta_t) @@ -1259,6 +1278,37 @@ def message(self, msg=None, where=None, fill='red', size=5, xoff=0, yoff=0, self.canvas.create_text((xx + xoff, yy + yoff), text=msg, fill=fill) + def show_tables(self): + + position = [ + [.1, .25], + [.25, .25], + + [.1, .65], + [.25, .65], + + [.1, .90], + [.25, .90], + + [.7, .85], + [.9, .85], + ] + + for label, group in self.jsf.groups.items(): + + gindex = ord(label) - ord('a') + + xx, yy = position[gindex] + + for team in group.get_table(): + self.message( + msg=team.statto(), + xx=xx, + yy=yy, + fill='cyan') + yy -= 0.05 + + def ball(self, place, fill='red', size=5, xoff=0, yoff=0): """ Message from a place """ From ee2e19031215bf17920a881cf690e224b55be82e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 26 May 2018 11:01:03 -0400 Subject: [PATCH 290/642] make some space for the knockout stage --- karmapi/wc.py | 146 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 98 insertions(+), 48 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index b32aaa5..1006890 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -205,7 +205,6 @@ def statto(self): """ Return line of stats for the team """ stats = self.stats() - print(stats) msg = "%s" % self.name msg += " {points:4d} {goal_delta:4d}".format(**stats) msg += " {goals:4d} {against:4d}".format(**stats) @@ -287,8 +286,9 @@ def __init__(self, a, b, when, where=None, ascore=None, bscore=None): self.ascore = ascore self.bscore = bscore + self.minute = 0 - # flag if score came from self.score() + # flag if score was simulated self.simulated = (ascore is None) or (bscore is None) self.number = Game.NUMBER Game.NUMBER += 1 @@ -298,6 +298,7 @@ def reset(self): """ Reset score if it was random """ if self.simulated: self.ascore = self.bscore = None + self.minute = 0 def __str__(self): @@ -330,13 +331,32 @@ def __ge__(self, other): async def kick_off(self): """ Game has kicked off """ + self.ascore = 0 + self.bscore = 0 + minutes = 45 + randint(0, 7) + await self.half(minutes) + + await self.half_time() + + await self.second_half() + + await self.full_time() + if self.is_group(): + # maybe a good time to check if group is finished? + return self.ascore, self.bscore + + def is_group(self): + + return hasattr(self, 'group') + + async def half(self, minutes): + """ Run a half """ + for minute in range(minutes): await self.run_minute() - #await self.half_time() - async def run_minute(self): @@ -352,7 +372,7 @@ async def run_minute(self): else: self.bscore += 1 - await self.flash() + await self.flash(" %dm" % self.minute, fill='green') if random() < yellow_per_minute: # yellow card? @@ -362,16 +382,21 @@ async def run_minute(self): # red card? pass + self.minute += 1 + return self.ascore, self.bscore async def half_time(self): - pass + + self.flash(fill='blue', tag='HT') async def second_half(self): - pass + minutes = 45 + randint(0, 7) + await self.half(minutes) async def full_time(self): - pass + + self.flash(fill='blue', tag='FT') async def extra_time(self): pass @@ -397,22 +422,12 @@ async def red(self, team, who=None, when=None): async def sub(self, team, off=None, on=None, when=None): pass - def score(self): - """ Make up a score """ - - if self.ascore == None or self.bscore == None: - self.ascore = randint(0, randint(0, 5)) - self.bscore = randint(0, randint(0, 5)) - - self.nullscore = True - - return self.ascore, self.bscore - async def run(self, events): """ Run the game """ - self.events = events - await self.kick_off() + + if self.ascore == None or self.bscore == None: + await self.kick_off() a = self.a b = self.b @@ -426,16 +441,16 @@ async def run(self, events): if self.ascore > self.bscore: a.points += 3 - elif bscore > ascore: + elif self.bscore > self.ascore: b.points += 3 else: a.points += 1 b.points += 1 - await self.flash() + await self.flash(tag='FT') - async def flash(self): + async def flash(self, tag='', fill='red'): a = self.a b = self.b @@ -443,8 +458,12 @@ async def flash(self): bscore = self.bscore msg = a.name + ' ' + str(ascore) + ' ' + str(bscore) + ' ' + b.name - - await self.events.put(dict(where=self.where, msg=msg, yoff=-90)) + msg += ' ' + tag + + print('flash', msg) + when = self.when + timedelta(minutes=self.minute) + await self.events.put(dict(where=self.where, msg=msg, yoff=-90, + when=when, fill=fill)) class Group: @@ -1146,6 +1165,10 @@ def __init__(self, parent, jsf=None, venues=None): self.when = datetime(2018, 6, 14) self.delta_t = 1. + # teleprinter location + self.teleprint_xxyy = .8, .025 + self.teleprints = [] + self.scan_venues(venues) self.add_event_map('r', self.reset) @@ -1248,50 +1271,77 @@ async def score_flash(self): while True: info = await self.jsf.events.get() - info['when'] = self.when - self.messages.append(info) - print(info) + + self.teleprint(**info) + def show_score_flashes(self): """ Show the score flashes """ - keep = [] - for info in self.messages: + xx, yy = self.teleprint_xxyy + + for msg, fill in self.teleprints: + + self.message(msg=msg, fill=fill, xx=xx, yy=yy) + xx, yy = xx, yy + .025 + + # Now do messages + keep = {} + for info in reversed(self.messages): when = info['when'] - if self.when < when + timedelta(hours=24): + if self.when < when + timedelta(hours=48): + pos = self.layout(**info) + if pos in keep: + continue + keep[pos] = info + self.message(**info) - keep.append(info) - self.messages = keep - - def message(self, msg=None, where=None, fill='red', size=5, xoff=0, yoff=0, - xx=None, yy=None, **kwargs): - """ Message from a place """ + self.messages = list(keep.values()) + + + def teleprint(self, msg=None, fill='orange', **kwargs): + """ teleprinter messages """ + self.teleprints.append((msg, fill)) + if len(self.teleprints) > 10: + del self.teleprints[0] + + def layout(self, where=None, xx=None, yy=None, **kwargs): + """ layout for location """ if xx is None or yy is None: xx, yy = self.latlon2xy(where) else: xx *= self.width yy *= self.height + return xx, yy + + + def message(self, msg=None, where=None, fill='red', size=5, xoff=0, yoff=0, + xx=None, yy=None, **kwargs): + """ Message from a place """ + + xx, yy = self.layout(where, xx, yy) + self.canvas.create_text((xx + xoff, yy + yoff), text=msg, fill=fill) def show_tables(self): position = [ - [.1, .25], - [.25, .25], + [.05, .1], + [.15, .1], - [.1, .65], - [.25, .65], + [.05, .25], + [.15, .25], - [.1, .90], - [.25, .90], + [.85, .75], + [.95, .75], - [.7, .85], - [.9, .85], + [.85, .9], + [.95, .9], ] for label, group in self.jsf.groups.items(): @@ -1300,13 +1350,13 @@ def show_tables(self): xx, yy = position[gindex] - for team in group.get_table(): + for team in group.get_table()[::-1]: self.message( msg=team.statto(), xx=xx, yy=yy, fill='cyan') - yy -= 0.05 + yy -= 0.025 def ball(self, place, fill='red', size=5, xoff=0, yoff=0): From f527b6148148191b56bf75870ed77dfb9c6f2dbf Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 27 May 2018 12:40:20 -0400 Subject: [PATCH 291/642] knockout stage seems to be working --- karmapi/wc.py | 263 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 199 insertions(+), 64 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 1006890..c5e9bbf 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -283,9 +283,12 @@ def __init__(self, a, b, when, where=None, ascore=None, bscore=None): self.b = b self.when = when self.where = where + self.label = '' self.ascore = ascore self.bscore = bscore + self.apen = self.bpen = 0 + self.minute = 0 # flag if score was simulated @@ -343,10 +346,22 @@ async def kick_off(self): await self.second_half() await self.full_time() + if self.is_group(): # maybe a good time to check if group is finished? return self.ascore, self.bscore + # knockout match, are we done? + if self.ascore == self.bscore: + + await self.extra_time() + await self.extra_half_time() + await self.extra_full_time() + + if self.ascore == self.bscore: + await self.penalties() + + def is_group(self): return hasattr(self, 'group') @@ -388,7 +403,7 @@ async def run_minute(self): async def half_time(self): - self.flash(fill='blue', tag='HT') + await self.flash(fill='blue', tag='HT') async def second_half(self): minutes = 45 + randint(0, 7) @@ -396,16 +411,18 @@ async def second_half(self): async def full_time(self): - self.flash(fill='blue', tag='FT') + await self.flash(fill='yellow', tag='FT') async def extra_time(self): - pass + minutes = 15 + randint(0, 3) + await self.half(minutes) async def extra_half_time(self): pass async def extra_full_time(self): - pass + minutes = 15 + randint(0, 3) + await self.half(minutes) async def penalties(self): pass @@ -438,15 +455,17 @@ async def run(self, events): a.against += self.bscore b.against += self.ascore - if self.ascore > self.bscore: - a.points += 3 + if self.is_group(): - elif self.bscore > self.ascore: - b.points += 3 + if self.ascore > self.bscore: + a.points += 3 - else: - a.points += 1 - b.points += 1 + elif self.bscore > self.ascore: + b.points += 3 + + else: + a.points += 1 + b.points += 1 await self.flash(tag='FT') @@ -465,6 +484,26 @@ async def flash(self, tag='', fill='red'): await self.events.put(dict(where=self.where, msg=msg, yoff=-90, when=when, fill=fill)) + def winner(self): + """ Return winning team """ + if self.ascore > self.bscore: + return self.a + elif self.bscore > self.ascore: + return self.b + + if self.apen > self.bpen: + return self.a + + return self.b + + def loser(self): + + win = self.winner() + if win == self.a: + return self.b + + return self.a + class Group: @@ -472,6 +511,7 @@ def __init__(self, teams=None, games=None): self.teams = teams self.games = games or [] + self.played = 0 def winner(self): """ Pick a winner """ @@ -481,6 +521,11 @@ def second(self): """ Pick a second """ return self.get_table()[1] + def is_finished(self): + + size = len(self.teams) + return self.played == (size * (size - 1)) / 2 + def __str__(self): return str(self.teams, self.games) @@ -493,17 +538,6 @@ def reset(self): for team in self.teams: team.reset() - def run(self): - """ Run the group """ - for game in self.games: - - print() - print (game) - print() - - game.run() - - def table(self): """ Show the group table """ teams = self.get_table() @@ -569,6 +603,9 @@ def __init__(self, groups, places=None, dates=None, now=None): self.games = curio.PriorityQueue() self.events = curio.UniversalQueue() + self.knockout = [] + self.winners = {} + self.seconds = {} async def load_group_games(self): """ Put the group games into the game queue """ @@ -584,8 +621,18 @@ async def load_group_games(self): await self.games.put(game) + self.its_a_knockout() + + for game in self.knockout: + await self.games.put(game) + def its_a_knockout(self): """ Set up knockout stage """ + places = self.places or (['???'] * len(games)) + dates = self.dates or [datetime.today()] * len(games) + + for where, when in zip(places, dates): + self.knockout.append(Game(None, None, when, where)) groups = self.groups key = sorted(groups.keys()) @@ -601,56 +648,42 @@ def its_a_knockout(self): games = [] + ix = 0 for gps in key, key2: for x in range(0, len(key), 2): a = gps[x] b = gps[x+1] - - teama = groups[a].winner() - teamb = groups[b].second() - games.append([teama, teamb]) + self.winners[a] = self.knockout[ix], 'a' + self.seconds[b] = self.knockout[ix], 'b' + ix += 1 - dates = dates or [datetime.today()] * len(games) - - for game, date in zip(games, dates): - game.append(date) - - places = places or (['???'] * len(games)) - for game, place in zip(games, places): - game.append(place) - - self.games = [] - for teama, teamb, when, place in games: - self.games.append(Game(teama, teamb, when, place)) - - for game in self.games: - print(game) - - - def run_groups(self): - """ Run the group stage """ - # group winners and seconds - winners = {} - seconds = {} - - # print out the games while we are at it - for xx, group in groups.items(): - - print(xx) - - for game in group.games: - print(game.a, game.b, game.when) + # now do knockout stage + ko = self.knockout + for ix, game in enumerate(ko[:8]): + gix = 8 + int(ix / 2) + if ix % 2 == 0: + self.winners[game.number] = self.knockout[gix], 'a' + else: + self.winners[game.number] = self.knockout[gix], 'b' - print() - group.run() - print() + for ix, game in enumerate(ko[8:12]): + gix = 12 + int(ix / 2) + if ix % 2 == 0: + self.winners[game.number] = self.knockout[gix], 'a' + else: + self.winners[game.number] = self.knockout[gix], 'b' - winners[xx] = group.winner() - seconds[xx] = group.second() + for ix, game in enumerate(ko[12:14]): + print(ix, len(self.knockout)) + if ix % 2 == 0: + self.winners[game.number] = self.knockout[15], 'a' + self.seconds[game.number] = self.knockout[14], 'b' + else: + self.winners[game.number] = self.knockout[15], 'b' + self.seconds[game.number] = self.knockout[14], 'a' - group.table() def generate_teams(self): """ Generate teams """ @@ -658,6 +691,56 @@ def generate_teams(self): for team in group.teams: yield team + def apres_match(self, game): + """ Deal with updating of knockout stage """ + + if game.number == 63: + print('third place:', game.winner()) + return + if game.number == 64: + print('Winner:', game.winner()) + return + + if game.is_group(): + group = game.group + group.played += 1 + + key = game.label.lower() + kgame, label = self.winners[key] + wteam = group.winner() + setattr(kgame, label, wteam) + if group.is_finished(): + wteam.games.append(game) + + kgame, label = self.seconds[key] + steam = group.second() + setattr(kgame, label, group.second()) + if group.is_finished(): + steam.games.append(game) + + for team in group.teams: + out = Game(None, None, game.when, where=NorthPole()) + if team not in (wteam, steam): + print('out', team) + team.games.append(out) + + else: + kgame, label = self.winners[game.number] + wteam = game.winner() + setattr(kgame, label, game.winner()) + wteam.games.append(kgame) + + if game.number in self.seconds: + kgame, label = self.seconds[game.number] + lteam = game.loser() + setattr(kgame, label, lteam) + lteam.games.append(kgame) + print('s', kgame.number, label, game.loser()) + else: + out = Game(None, None, game.when, where=NorthPole()) + game.loser().games.append(out) + + async def reset(self): """ Reset things to start again """ await self.load_group_games() @@ -690,11 +773,14 @@ async def run(self): game = await self.games.get() if game.when < self.now: + print(game.number) print(self.now, game) # Run the game await game.run(self.events) - # Do post processing depending on the type of Game + + # post process game + self.apres_match(game) else: await self.games.put(game) @@ -805,6 +891,13 @@ class Sochi(Place): lat = 43 + (24 / 60) lon = 39 + (57 / 60) +class NorthPole(Place): + """ """ + + name = 'North Pole' + lat = 90 + lon = 0 + places = dict( @@ -1117,6 +1210,7 @@ class Sochi(Place): places['samara'], places['sochi'], + places['stpetersberg'], places['moscow'], @@ -1250,6 +1344,8 @@ def step_balls(self): self.show_score_flashes() self.show_tables() + + self.show_knockout() self.when += timedelta(hours=self.delta_t) @@ -1358,9 +1454,48 @@ def show_tables(self): fill='cyan') yy -= 0.025 + def show_knockout(self): + + if not self.jsf.knockout: + return + xx = .1 + yy = .6 + yinc = 0.025 + for ix, game in enumerate(self.jsf.knockout): + aa = game.a or ' ' + bb = game.b or ' ' + + ascore = game.ascore + bscore = game.bscore + if ascore is None: ascore = '-' + if bscore is None: bscore = '-' + + self.message(msg="{} {} {} {}".format( + aa, ascore, bscore, bb), + xx=xx, yy=yy, fill='green') + + yy += 0.05 + + if ix in [7, 11, 13]: + xx += .1 + yy = .6 + yinc *= 2 + + final = self.jsf.knockout[-1] + if final.ascore != None: + xx += 0.1 + yy = 0.6 + for game in final.winner().games: + print(game.where, game.when) + self.message(msg="{}".format( + final.winner().name), + xx=xx, yy=yy, + fill='gold') + + def ball(self, place, fill='red', size=5, xoff=0, yoff=0): - """ Message from a place """ + """ Draw a filled circle at place """ xx, yy = self.latlon2xy(place) From 31b5ef6e9429fff4f6ad649e3402e2675e94a893 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 28 May 2018 20:18:36 -0400 Subject: [PATCH 292/642] reset seems to reset, time to practice pens? --- karmapi/wc.py | 42 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index c5e9bbf..40a8098 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -137,6 +137,7 @@ def __init__(self, name=None, win=None): self.lon = 0 self.win = win or 1 / n + self.home = False self.reset() @@ -148,6 +149,7 @@ def reset(self): self.red = 0 self.goals = 0 self.against = 0 + self.home = None # Keep track of games played/to be played? self.games = [] @@ -164,6 +166,9 @@ def load_squad(self): def where(self, when): """ Where is the team? """ + if self.home is not None: + return self.home + last_game = None next_game = None for game in self.games: @@ -186,6 +191,10 @@ def where(self, when): return self.lat, self.lon + def go_home(self): + + self.home = NorthPole() + def __str__(self): return self.name @@ -301,6 +310,9 @@ def reset(self): """ Reset score if it was random """ if self.simulated: self.ascore = self.bscore = None + + self.apen = self.bpen = 0 + self.minute = 0 def __str__(self): @@ -599,6 +611,7 @@ def __init__(self, groups, places=None, dates=None, now=None): self.dates = dates self.now = now or datetime(2018, 6, 14) + self.start = self.now self.step = timedelta(hours=1) self.games = curio.PriorityQueue() @@ -628,6 +641,9 @@ async def load_group_games(self): def its_a_knockout(self): """ Set up knockout stage """ + self.knockout = [] + Game.NUMBER = 49 + places = self.places or (['???'] * len(games)) dates = self.dates or [datetime.today()] * len(games) @@ -676,7 +692,6 @@ def its_a_knockout(self): self.winners[game.number] = self.knockout[gix], 'b' for ix, game in enumerate(ko[12:14]): - print(ix, len(self.knockout)) if ix % 2 == 0: self.winners[game.number] = self.knockout[15], 'a' self.seconds[game.number] = self.knockout[14], 'b' @@ -735,14 +750,22 @@ def apres_match(self, game): lteam = game.loser() setattr(kgame, label, lteam) lteam.games.append(kgame) - print('s', kgame.number, label, game.loser()) else: - out = Game(None, None, game.when, where=NorthPole()) - game.loser().games.append(out) + game.loser().go_home() async def reset(self): """ Reset things to start again """ + self.now = self.start + Game.NUMBER -= len(self.knockout) + + self.knockout = [] + self.winners = {} + self.seconds = {} + + while not self.games.empty(): + await self.games.get() + await self.load_group_games() async def run(self): @@ -768,7 +791,8 @@ async def run(self): await self.reset() print('loop forever?') - while not self.games.empty(): + #while not self.games.empty(): + while True: game = await self.games.get() @@ -1357,10 +1381,12 @@ async def reset(self): """ Reset timer """ self.when = datetime(2018, 6, 14) - self.jsf.reset() - await self.jsf.load_group_games() - self.messages = [] + self.teleprints =[] + + await self.jsf.reset() + #await self.jsf.load_group_games() + async def score_flash(self): From 7ca120bfcd83c295c05a7b6bd158c7300a7e6a06 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 28 May 2018 21:10:16 -0400 Subject: [PATCH 293/642] penalty practice coming along lets show them? --- karmapi/wc.py | 87 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 77 insertions(+), 10 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 40a8098..41a07ee 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -247,17 +247,17 @@ class Penalty: which: which penalty: 1, 2, 3 etc """ - def __init__(self, team, who=None, which=None, game=None, score=True): + def __init__(self, team, who=None, which=None, when=None, + game=None, score=True): self.who = who self.when = when self.game = game - self.penalty = penalty + self.which = which + self.score = True + self.penalty = True + -class ShootOut: - """ Class to run a penalty shoot out """ - pass - def warp(a, b, when): """ Interpolate between a and b based on time """ @@ -296,7 +296,8 @@ def __init__(self, a, b, when, where=None, ascore=None, bscore=None): self.ascore = ascore self.bscore = bscore - self.apen = self.bpen = 0 + self.apen = [] + self.bpen = [] self.minute = 0 @@ -311,7 +312,8 @@ def reset(self): if self.simulated: self.ascore = self.bscore = None - self.apen = self.bpen = 0 + self.apen = [] + self.bpen = [] self.minute = 0 @@ -437,7 +439,70 @@ async def extra_full_time(self): await self.half(minutes) async def penalties(self): - pass + """ Don't miss this """ + first, second = self.a, self.b + + if random() < 0.5: + first, second = second, first + + total = 0 + done = False + while not done: + done = self.penalty(first) + first, second = second, first + + def penalty(self, team): + """ Take a penalty """ + which = len(self.apen) + len(self.bpen) + + if random() < 0.5: + pen = Penalty(team, score=True, which=which) + + if team is self.a: + self.apen.append(pen) + else: + self.bpen.append(pen) + + return self.all_over() + + def pens_score(self): + """ score in penalties """ + apens = [x for x in self.apen if x.score] + bpens = [x for x in self.bpen if x.score] + + return len(apens), len(bpens) + + + def all_over(self): + """ Are the pens done? """ + + a, b = self.pens_score() + + if a == b: + return False + + aa = len(self.apen) + bb = len(self.bpen) + + which = aa + bb + + if which <= 10: + aleft = 5 - aa + bleft = 5 - bb + + else: + aleft = bleft = 0 + + if aa < bb: + aleft = 1 + if bb < aa: + bleft = 1 + + if b > a + aleft: + return True + + if a > b + bleft: + return True async def goal(self, team, who=None, when=None): pass @@ -503,7 +568,9 @@ def winner(self): elif self.bscore > self.ascore: return self.b - if self.apen > self.bpen: + # penalties + aa, bb = self.pens_score() + if aa > bb: return self.a return self.b From b0380f746dc68f7fec78d6ab0e425b6259336ce8 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 29 May 2018 18:38:48 -0400 Subject: [PATCH 294/642] add missing k now whats the form? --- karmapi/wc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 41a07ee..467937f 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -792,7 +792,7 @@ def apres_match(self, game): wteam = group.winner() setattr(kgame, label, wteam) if group.is_finished(): - wteam.games.append(game) + wteam.games.append(kgame) kgame, label = self.seconds[key] steam = group.second() From 938501e42c3a68d6a59d058a97ae2d3147ee5d93 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 29 May 2018 18:47:23 -0400 Subject: [PATCH 295/642] cpr for spherical rendering --- karmapi/cpr.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index a129a87..a8bd276 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -47,6 +47,7 @@ def run(self): self.t += 1 + class NestedWaves(pigfarm.Yard): """ Inner and outer spheres @@ -103,9 +104,20 @@ def step_balls(self): self.uq = uq - def draw(self): - pass + async def draw(self): + + ball = await self.uq.get() + + self.draw_ball(ball) + async def draw_ball(self, ball): + """ wc has everything???? + + feels like I have written this bit 20 times + """ + width, height = self.width, self.height + + async def run(self): """ Run the waves """ @@ -119,6 +131,8 @@ async def run(self): self.draw() self.step_balls() + + await self.draw() await curio.sleep(self.sleep) From 0d84d4d5190957aee651436d9f0dad31dee6623a Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 31 May 2018 18:52:56 -0400 Subject: [PATCH 296/642] ball drawing responding to cpr --- karmapi/cpr.py | 58 +++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 46 insertions(+), 12 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index a8bd276..e924e27 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -17,6 +17,8 @@ import curio +from PIL import Image, ImageTk + from karmapi import base, tpot, pigfarm from random import random, randint @@ -28,8 +30,8 @@ def __init__(self, size=None, head=False, tail=False, t=0): size = size or 4 grid = [] - for lat in range(size): - grid.append([random() for x in range(size)]) + for pt in range(size * size): + grid.append(tuple(int(256 * random()) for c in 'rgb')) self.grid = grid self.size = size @@ -41,12 +43,33 @@ def __init__(self, size=None, head=False, tail=False, t=0): # time moves slower in the inner spheres? self.sleep = 1 / self.size - def run(self): + def project(self): + """ Turn into a PIL? """ + image = Image.new('RGB', (self.size, self.size)) + image.putdata(self.grid) + + return image + + async def run(self): print(self.head, self.tail, self.size, self.t) self.t += 1 + if self.head: + return await self.head_run() + + # now what to do? + pass + + async def head_run(self): + """ inner wave + + red, green, blue + """ + pass + + class NestedWaves(pigfarm.Yard): """ Inner and outer spheres @@ -94,13 +117,18 @@ def build(self): self.uq.put(sphere) - def step_balls(self): + async def step_balls(self): + """ step all the balls once """ + # FIXME -- think we just step the outer ball + # really need a RandomQueue() uq = curio.UniversalQueue() while self.uq.qsize(): - ball = self.uq.get() - ball.run() - uq.put(ball) + ball = await self.uq.get() + + await ball.run() + + await uq.put(ball) self.uq = uq @@ -108,7 +136,7 @@ async def draw(self): ball = await self.uq.get() - self.draw_ball(ball) + await self.draw_ball(ball) async def draw_ball(self, ball): """ wc has everything???? @@ -117,6 +145,15 @@ async def draw_ball(self, ball): """ width, height = self.width, self.height + image = ball.project() + + image = image.resize((int(width), int(height))) + + self.phim = ImageTk.PhotoImage(image) + + print('creating image') + self.canvas.create_image(0, 0, image=self.phim) + async def run(self): """ Run the waves """ @@ -128,11 +165,8 @@ async def run(self): while True: self.canvas.delete('all') - self.draw() - - self.step_balls() - await self.draw() + await self.step_balls() await curio.sleep(self.sleep) From a94e7ec9d2e3d917ff74547f9b7f97d5f39c9224 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 31 May 2018 19:24:36 -0400 Subject: [PATCH 297/642] random noise showing up in cpr --- karmapi/cpr.py | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index e924e27..6bba38f 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -52,8 +52,6 @@ def project(self): async def run(self): - print(self.head, self.tail, self.size, self.t) - self.t += 1 if self.head: @@ -120,23 +118,25 @@ def build(self): async def step_balls(self): """ step all the balls once """ - # FIXME -- think we just step the outer ball - # really need a RandomQueue() - uq = curio.UniversalQueue() + uq = [] while self.uq.qsize(): ball = await self.uq.get() await ball.run() - await uq.put(ball) + uq.append(ball) - self.uq = uq + for ball in uq: + await self.uq.put(ball) + async def draw(self): ball = await self.uq.get() await self.draw_ball(ball) + + await self.uq.put(ball) async def draw_ball(self, ball): """ wc has everything???? @@ -149,10 +149,13 @@ async def draw_ball(self, ball): image = image.resize((int(width), int(height))) - self.phim = ImageTk.PhotoImage(image) + print(image.size) + self.phim = phim = ImageTk.PhotoImage(image) - print('creating image') - self.canvas.create_image(0, 0, image=self.phim) + print('creating image', phim.width(), phim.height()) + xx = int(self.width / 2) + yy = int(self.height / 2) + self.canvas.create_image(xx, yy, image=phim) async def run(self): @@ -160,11 +163,13 @@ async def run(self): self.sleep = 0.05 + self.set_background() while True: self.canvas.delete('all') + print('drawing', self.uq.qsize()) await self.draw() await self.step_balls() From 734c6b5ef0a35c56f2139eba6cc6617cb059a1dc Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 31 May 2018 20:02:25 -0400 Subject: [PATCH 298/642] heads ball or tails gives special wave --- karmapi/cpr.py | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 6bba38f..e12a625 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -17,6 +17,8 @@ import curio +import numpy + from PIL import Image, ImageTk from karmapi import base, tpot, pigfarm @@ -43,6 +45,9 @@ def __init__(self, size=None, head=False, tail=False, t=0): # time moves slower in the inner spheres? self.sleep = 1 / self.size + if self.head or self.tail: + self.setup_end() + def project(self): """ Turn into a PIL? """ image = Image.new('RGB', (self.size, self.size)) @@ -54,18 +59,39 @@ async def run(self): self.t += 1 - if self.head: - return await self.head_run() + if self.head or self.tail: + return await self.end_run() # now what to do? pass - async def head_run(self): - """ inner wave + def setup_end(self): + """ Do some set up work for a head sphere """ + + self.waves = {} + for c in 'rgb': + phase = random() + scale = random() + + self.waves[c] = dict( + tint=c, + phase=phase, + scale=scale) + + async def end_run(self): + """ inner or outer wave red, green, blue + + How to fill in self.grid? """ - pass + n = self.size + for ix, (c, wave) in enumerate(self.waves.items()): + for x in range(n): + for y in range(n): + pass + + From 7a34dd3e1583bcb3623ad12595d55d4ea3541cf4 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 31 May 2018 20:43:21 -0400 Subject: [PATCH 299/642] making waves --- karmapi/cpr.py | 54 ++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 8 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index e12a625..c920801 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -13,6 +13,8 @@ But using a universal queue, so let each sphere run in its own co-routine. """ +import math + import argparse import curio @@ -69,29 +71,65 @@ def setup_end(self): """ Do some set up work for a head sphere """ self.waves = {} + self.inc = math.pi/20 + for c in 'rgb': phase = random() scale = random() - self.waves[c] = dict( - tint=c, - phase=phase, - scale=scale) + self.waves[c] = [c, phase, scale] async def end_run(self): """ inner or outer wave red, green, blue + let's do: + red up down + blue left right + green in and out all over + How to fill in self.grid? """ n = self.size - for ix, (c, wave) in enumerate(self.waves.items()): - for x in range(n): - for y in range(n): - pass + width = 2 * math.pi + height = math.pi + + + grid = [] + + for x in range(n): + xx = ((x / n) + (1 / (2 * n))) * 2 * math.pi + + xx += self.inc * self.t + + for y in range(n): + + yy = (y / n) + (1 / (2 * n)) + yy += self.inc * self.t + + rc, rphase, rscale = self.waves['r'] + gc, gphase, gscale = self.waves['g'] + bc, bphase, bscale = self.waves['b'] + + value = ( + int(256 * sample_wave(rphase, xx) * rscale), + int(256 * sample_wave(bphase, yy) * bscale), + int(256 * sample_wave(gphase, xx+yy) * gscale)) + + grid.append(value) + + print(grid) + + self.grid = grid +def sample_wave(phase, x): + + xx = x + (2 * math.pi * phase) + + return math.sin(xx) + From 70a672c4ef9c29c0373d7521f622d345970f131e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 31 May 2018 20:57:38 -0400 Subject: [PATCH 300/642] add pause to cpr to admire the view --- karmapi/cpr.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index c920801..2b87161 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -158,6 +158,12 @@ def __init__(self, parent, n=10, base=4, inc=4): self.uq = curio.UniversalQueue() self.build() + self.add_event_map(' ', self.pause) + self.paused = False + + async def pause(self): + """ Pause """ + self.paused = not self.paused def build(self): """ Create the balls """ @@ -231,6 +237,10 @@ async def run(self): self.set_background() while True: + if self.paused: + await curio.sleep(self.sleep) + continue + self.canvas.delete('all') print('drawing', self.uq.qsize()) From a308843d10051b0ef37f85958da5be2f41f50f07 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 31 May 2018 21:21:06 -0400 Subject: [PATCH 301/642] wave reset option for cpr --- karmapi/cpr.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 2b87161..9c04517 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -160,14 +160,21 @@ def __init__(self, parent, n=10, base=4, inc=4): self.build() self.add_event_map(' ', self.pause) self.paused = False + self.add_event_map('r', self.reset) async def pause(self): """ Pause """ self.paused = not self.paused + async def reset(self): + """ Reset waves """ + self.balls[0].setup_end() + self.balls[-1].setup_end() + def build(self): """ Create the balls """ # add a bunch of spheres to the queue + self.balls = [] for ball in range(self.n): size = self.base + (ball * self.inc) @@ -183,6 +190,7 @@ def build(self): sphere = Sphere(size, head=head, tail=tail) self.uq.put(sphere) + self.balls.append(sphere) async def step_balls(self): @@ -202,11 +210,10 @@ async def step_balls(self): async def draw(self): - ball = await self.uq.get() + ball = self.balls[-1] await self.draw_ball(ball) - await self.uq.put(ball) async def draw_ball(self, ball): """ wc has everything???? From d0b991a97f2a7916501fbd0b598fac3ab8011395 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 1 Jun 2018 21:48:19 -0400 Subject: [PATCH 302/642] cpr pretty if nothing else --- karmapi/cpr.py | 176 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 155 insertions(+), 21 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 9c04517..5ffd4df 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -42,6 +42,9 @@ def __init__(self, size=None, head=False, tail=False, t=0): self.head = head self.tail = tail + self.last_ball = None + self.next_ball = None + self.fade = 1 / math.e self.t = t # time moves slower in the inner spheres? @@ -64,8 +67,83 @@ async def run(self): if self.head or self.tail: return await self.end_run() - # now what to do? - pass + # Here if we are between two spheres + # so have last_ball and next_ball + + # for each point in grid select corresponding + # points in inner/outer spheres + + lb = self.last_ball + nb = self.next_ball + + lsize = self.last_ball.size + nsize = self.next_ball.size + n = self.size + + grid = [] + ix = 0 + delta = (1 / (2 * n)) * 2 * math.pi + + for x in range(self.size): + x1 = (x / n) * 2 * math.pi + x2 = x1 + delta + + for y in range(self.size): + y1 = (y / n) * 2 * math.pi + y2 = y1 + delta + + lbc = lb.sample(x1, y1, x2, y2) + nbc = nb.sample(x1, y1, x2, y2) + + current = self.grid[len(grid)] + + value = [(aa + bb + cc) * self.fade + for aa, bb, cc in zip(lbc, nbc, current)] + + grid.append(tuple(self.quantise(x) for x in value)) + + self.grid = grid + self.normalise() + + def quantise(self, value): + + value = int(value * 256) + value = max(0, min(value, 255)) + + return value + + def normalise(self): + """ Normalise the grid + + want mean for each colour to be 127 + + let's just scale so range is 0-255 + """ + + off = [] + scale = [] + for ix in range(len(self.grid[0])): + amin = min(x[ix] for x in self.grid) + amax = min(x[ix] for x in self.grid) + + if amax != amin: + sc = 255 / (amax - amin) + else: + sc = 1.0 + + scale.append(sc) + off.append(amin) + + + grid = [] + for values in self.grid: + value = tuple(int((x-ff) * sc) + for x, sc, ff in zip(values, scale, off)) + + grid.append(value) + + self.grid = grid + def setup_end(self): """ Do some set up work for a head sphere """ @@ -79,11 +157,35 @@ def setup_end(self): self.waves[c] = [c, phase, scale] + + def sample(self, x1, y1, x2, y2): + """ Return a pixel given a rectangle """ + + delta = 1 / self.size + delta *= 2 * math.pi + + xdelta = x2 - x1 + ydelta = y2 - y1 + + k = int(xdelta / delta) + 1 + + xx = int(x1 / delta) + + xx = randint(xx, xx + k - 1) + + yy = int(y1 / delta) + + yy = randint(yy, yy + k - 1) + + #print('sample:', xx, yy, self.size, len(self.grid)) + print(xx, yy, k, self.size) + return self.grid[(yy * self.size) + xx] + async def end_run(self): """ inner or outer wave red, green, blue - + let's do: red up down blue left right @@ -116,10 +218,8 @@ async def end_run(self): int(256 * sample_wave(rphase, xx) * rscale), int(256 * sample_wave(bphase, yy) * bscale), int(256 * sample_wave(gphase, xx+yy) * gscale)) - - grid.append(value) - print(grid) + grid.append(value) self.grid = grid @@ -154,6 +254,7 @@ def __init__(self, parent, n=10, base=4, inc=4): self.n = n self.inc = inc + # expect we'll find something to do with a queue self.uq = curio.UniversalQueue() @@ -161,6 +262,10 @@ def __init__(self, parent, n=10, base=4, inc=4): self.add_event_map(' ', self.pause) self.paused = False self.add_event_map('r', self.reset) + + self.dball = 0 + self.add_event_map('j', self.backward) + self.add_event_map('k', self.forward) async def pause(self): """ Pause """ @@ -171,10 +276,22 @@ async def reset(self): self.balls[0].setup_end() self.balls[-1].setup_end() + async def forward(self): + """ Move to next sphere """ + self.dball += 1 + self.dball %= self.n + + async def backward(self): + """ Move to previous sphere """ + self.dball -= 1 + if self.dball < 0: + self.dball = self.n - 1 + def build(self): """ Create the balls """ # add a bunch of spheres to the queue self.balls = [] + last_ball = None for ball in range(self.n): size = self.base + (ball * self.inc) @@ -186,31 +303,49 @@ def build(self): tail = False if ball == self.n - 1: tail = True - + sphere = Sphere(size, head=head, tail=tail) + + if not sphere.head: + sphere.last_ball = last_ball + last_ball.next_ball = sphere self.uq.put(sphere) self.balls.append(sphere) + last_ball = sphere + + async def step_all(self): + """ Step all balls once """ + balls = self.balls[:] + while balls: + ix = randint(0, len(balls)-1) + + await balls[ix].run() + + del balls[ix] + async def step_balls(self): - """ step all the balls once """ + """ step all the balls once - uq = [] - while self.uq.qsize(): - ball = await self.uq.get() - - await ball.run() + or maybe a random ball? + """ + ball = self.pick() - uq.append(ball) + await ball.run() - for ball in uq: - await self.uq.put(ball) - + def pick(self): + """ Choose a ball """ + return self.balls[randint(0, self.n-1)] async def draw(self): - ball = self.balls[-1] + # xx = randint(0, self.n - 1) + xx = self.dball + + print('And the lucky number is:', xx) + ball = self.balls[xx] await self.draw_ball(ball) @@ -226,10 +361,8 @@ async def draw_ball(self, ball): image = image.resize((int(width), int(height))) - print(image.size) self.phim = phim = ImageTk.PhotoImage(image) - print('creating image', phim.width(), phim.height()) xx = int(self.width / 2) yy = int(self.height / 2) self.canvas.create_image(xx, yy, image=phim) @@ -242,6 +375,8 @@ async def run(self): self.set_background() + + await self.step_all() while True: if self.paused: @@ -250,7 +385,6 @@ async def run(self): self.canvas.delete('all') - print('drawing', self.uq.qsize()) await self.draw() await self.step_balls() From 49724594a0d376ae8f49cb7e1d9b593ebea0f81f Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 2 Jun 2018 16:29:04 -0400 Subject: [PATCH 303/642] python3.6 -m karmapi.cpr -n 4 --inc 10 --base 256 --- karmapi/cpr.py | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 5ffd4df..b1fcb28 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -178,7 +178,7 @@ def sample(self, x1, y1, x2, y2): yy = randint(yy, yy + k - 1) #print('sample:', xx, yy, self.size, len(self.grid)) - print(xx, yy, k, self.size) + #print(xx, yy, k, self.size) return self.grid[(yy * self.size) + xx] async def end_run(self): @@ -315,7 +315,7 @@ def build(self): last_ball = sphere - async def step_all(self): + async def random_step_some(self): """ Step all balls once """ balls = self.balls[:] while balls: @@ -325,15 +325,27 @@ async def step_all(self): del balls[ix] + async def backward_step_all(self): + """ Step all balls once """ + balls = self.balls[::-1] + while balls: + ix = randint(0, len(balls)-1) + + await balls[ix].run() + + del balls[ix] async def step_balls(self): """ step all the balls once or maybe a random ball? """ - ball = self.pick() + n = randint(0, len(self.balls) - 1) - await ball.run() + for ball in range(n): + ball = self.pick() + + await ball.run() def pick(self): """ Choose a ball """ @@ -376,7 +388,9 @@ async def run(self): self.set_background() - await self.step_all() + #await self.random_step_some() + + await self.backward_step_all() while True: if self.paused: @@ -404,6 +418,7 @@ def main(): help='what to show') parser.add_argument('-n', type=int, default=10) parser.add_argument('--inc', type=int, default=4) + parser.add_argument('--base', type=int, default=20) args = parser.parse_args() @@ -414,7 +429,7 @@ def main(): farm.add(GuidoClock) - farm.add(NestedWaves, dict(n=args.n)) + farm.add(NestedWaves, dict(n=args.n, inc=args.inc, base=args.base)) curio.run(farm.run(), with_monitor=True) From 6241f046b9cd6cc6c243b739967e6628cd343e58 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 5 Jun 2018 22:25:38 -0400 Subject: [PATCH 304/642] red green blue and all black cpr --- karmapi/cpr.py | 46 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index b1fcb28..068f69a 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -29,15 +29,17 @@ class Sphere: - def __init__(self, size=None, head=False, tail=False, t=0): + def __init__(self, size=None, head=False, tail=False, + t=0, m=1., r=1.): size = size or 4 grid = [] - for pt in range(size * size): - grid.append(tuple(int(256 * random()) for c in 'rgb')) + self.red = [] + self.green = [] + self.blue = [] - self.grid = grid + self.grid = [] self.size = size self.head = head @@ -50,12 +52,27 @@ def __init__(self, size=None, head=False, tail=False, t=0): # time moves slower in the inner spheres? self.sleep = 1 / self.size + for pt in range(size * size): + self.red.append(random()) + self.green.append(random()) + self.blue.append(random()) + if self.head or self.tail: self.setup_end() + return + + def project(self): """ Turn into a PIL? """ image = Image.new('RGB', (self.size, self.size)) + + # FIXME do the 256 magic int stuff here + grid = [] + for rgb in zip(self.red, self.green, self.blue): + pixel = tuple(self.quantise(x) for x in rgb) + grid.append(pixel) + image.putdata(self.grid) return image @@ -95,15 +112,23 @@ async def run(self): lbc = lb.sample(x1, y1, x2, y2) nbc = nb.sample(x1, y1, x2, y2) - current = self.grid[len(grid)] + cix = (y * self.size) + x + current = (self.red[cix], self.green[cix], self.blue[cix]) value = [(aa + bb + cc) * self.fade for aa, bb, cc in zip(lbc, nbc, current)] - grid.append(tuple(self.quantise(x) for x in value)) + grid.append(value) - self.grid = grid - self.normalise() + self.grid2rgb(grid) + #self.normalise() + + def grid2rgb(self, value): + + for ix, (r, g, b) in enumerate(value): + self.red[ix] = r + self.green[ix] = g + self.blue[ix] = r def quantise(self, value): @@ -179,7 +204,8 @@ def sample(self, x1, y1, x2, y2): #print('sample:', xx, yy, self.size, len(self.grid)) #print(xx, yy, k, self.size) - return self.grid[(yy * self.size) + xx] + ix = (yy * self.size) + xx + return self.red[ix], self.green[ix], self.blue[ix] async def end_run(self): """ inner or outer wave @@ -221,7 +247,7 @@ async def end_run(self): grid.append(value) - self.grid = grid + self.grid2rgb(grid) def sample_wave(phase, x): From 297ddbc62ddc6f26aa4d58b4eb2b09d10697d11d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 5 Jun 2018 23:21:04 -0400 Subject: [PATCH 305/642] there and back again rgb cpr --- karmapi/cpr.py | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 068f69a..54540e5 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -39,7 +39,6 @@ def __init__(self, size=None, head=False, tail=False, self.green = [] self.blue = [] - self.grid = [] self.size = size self.head = head @@ -68,14 +67,21 @@ def project(self): image = Image.new('RGB', (self.size, self.size)) # FIXME do the 256 magic int stuff here + + print('rgb', len(self.red), len(self.green), len(self.blue)) + + image.putdata(self.rgb2grid()) + + return image + + def rgb2grid(self): grid = [] for rgb in zip(self.red, self.green, self.blue): pixel = tuple(self.quantise(x) for x in rgb) grid.append(pixel) - image.putdata(self.grid) - - return image + return grid + async def run(self): @@ -132,7 +138,7 @@ def grid2rgb(self, value): def quantise(self, value): - value = int(value * 256) + value = int(127 + (value * 128)) value = max(0, min(value, 255)) return value @@ -147,9 +153,10 @@ def normalise(self): off = [] scale = [] - for ix in range(len(self.grid[0])): - amin = min(x[ix] for x in self.grid) - amax = min(x[ix] for x in self.grid) + grid = self.rgb2grid() + for ix in range(len(grid[0])): + amin = min(x[ix] for x in grid) + amax = min(x[ix] for x in grid) if amax != amin: sc = 255 / (amax - amin) @@ -167,7 +174,8 @@ def normalise(self): grid.append(value) - self.grid = grid + # back to rgb + self.grid2rgb(grid) def setup_end(self): @@ -202,8 +210,6 @@ def sample(self, x1, y1, x2, y2): yy = randint(yy, yy + k - 1) - #print('sample:', xx, yy, self.size, len(self.grid)) - #print(xx, yy, k, self.size) ix = (yy * self.size) + xx return self.red[ix], self.green[ix], self.blue[ix] @@ -241,9 +247,9 @@ async def end_run(self): bc, bphase, bscale = self.waves['b'] value = ( - int(256 * sample_wave(rphase, xx) * rscale), - int(256 * sample_wave(bphase, yy) * bscale), - int(256 * sample_wave(gphase, xx+yy) * gscale)) + sample_wave(rphase, xx) * rscale, + sample_wave(bphase, yy) * bscale, + sample_wave(gphase, xx+yy) * gscale) grid.append(value) From d8c045cdd9f212d5e0bee105356102130b676632 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 5 Jun 2018 23:41:16 -0400 Subject: [PATCH 306/642] rgb rand unit fix --- karmapi/cpr.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 54540e5..f2b31ae 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -52,16 +52,14 @@ def __init__(self, size=None, head=False, tail=False, self.sleep = 1 / self.size for pt in range(size * size): - self.red.append(random()) - self.green.append(random()) - self.blue.append(random()) + self.red.append(randunit()) + self.green.append(randunit()) + self.blue.append(randunit()) if self.head or self.tail: self.setup_end() return - - def project(self): """ Turn into a PIL? """ image = Image.new('RGB', (self.size, self.size)) @@ -255,7 +253,15 @@ async def end_run(self): self.grid2rgb(grid) - + +def randunit(): + + x = random() + if random() > 0.5: + x *= -1 + + return x + def sample_wave(phase, x): xx = x + (2 * math.pi * phase) @@ -432,7 +438,8 @@ async def run(self): self.canvas.delete('all') await self.draw() - await self.step_balls() + #await self.step_balls() + await self.backward_step_all() await curio.sleep(self.sleep) From b53adfcf62769492886bc4b3e9c8fd2b1f91327f Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 6 Jun 2018 13:20:21 -0400 Subject: [PATCH 307/642] round objects in karma pi talk? --- docs/roikpi.rst | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 docs/roikpi.rst diff --git a/docs/roikpi.rst b/docs/roikpi.rst new file mode 100644 index 0000000..9515d29 --- /dev/null +++ b/docs/roikpi.rst @@ -0,0 +1,16 @@ +=========================== + Round Objects in Karma Pi +=========================== + +A tour of round objects of all kinds in karma pi land. + +Modelling nested spheres. + +Balls of all kinds, the World Cup of soccer too. + +Using git to show how I develop code. + +How ideas change and evolve over time. + +Open data too and some ideas about decentralised systems. + From b3d4f0c2de9c0861d6460db6a8a60884509a6c3c Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 6 Jun 2018 17:23:00 -0400 Subject: [PATCH 308/642] random tail sphere looking good --- karmapi/cpr.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index f2b31ae..ebfebbf 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -98,7 +98,6 @@ async def run(self): nb = self.next_ball lsize = self.last_ball.size - nsize = self.next_ball.size n = self.size grid = [] @@ -114,7 +113,11 @@ async def run(self): y2 = y1 + delta lbc = lb.sample(x1, y1, x2, y2) - nbc = nb.sample(x1, y1, x2, y2) + + if nb: + nbc = nb.sample(x1, y1, x2, y2) + else: + nbc = tuple(randunit() for c in 'rgb') cix = (y * self.size) + x current = (self.red[cix], self.green[cix], self.blue[cix]) @@ -340,7 +343,8 @@ def build(self): tail = False if ball == self.n - 1: - tail = True + #tail = True + pass sphere = Sphere(size, head=head, tail=tail) From 0b551abdce5a6afc1143f2c10aaeb019982e62fd Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 6 Jun 2018 17:34:05 -0400 Subject: [PATCH 309/642] cpr for cpr doc string cpr stu --- karmapi/cpr.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index ebfebbf..0f8e253 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -1,6 +1,12 @@ """ Not, CPR, but Colin P Rourke. +Or CPU central processsor unit? + +CP R s t U + +CPR: show time universe + Simulate nested spherical waves. Things have moved on a little. From 52e36a0cfbd07c38230797184da825a07b761099 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 7 Jun 2018 15:41:16 -0400 Subject: [PATCH 310/642] add simple script to bin to test karma --- bin/karma | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100755 bin/karma diff --git a/bin/karma b/bin/karma new file mode 100755 index 0000000..b13d50e --- /dev/null +++ b/bin/karma @@ -0,0 +1,9 @@ +#!/usr/bin/python3 + +import sys + +sys.path.append('..') + +from karmapi import cpr + +cpr.main() From fc0f1556d75ade2084f3e8e79e37a3de9981261c Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 7 Jun 2018 20:26:39 -0400 Subject: [PATCH 311/642] cpr provides support for ncdf and pigfarm has a sty --- karmapi/cpr.py | 8 +--- karmapi/ncdf.py | 107 +++++++++++++++++++++++++++++++++++++-------- karmapi/pigfarm.py | 11 +++++ 3 files changed, 101 insertions(+), 25 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 0f8e253..418881a 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -472,13 +472,7 @@ def main(): args = parser.parse_args() - farm = pigfarm.PigFarm() - - from karmapi.mclock2 import GuidoClock - - farm.add(GuidoClock) - - farm.add(NestedWaves, dict(n=args.n, inc=args.inc, base=args.base)) + farm = pigfarm.sty(NestedWaves, dict(n=args.n, inc=args.inc, base=args.base)) curio.run(farm.run(), with_monitor=True) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 8b12cac..faa2380 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -9,10 +9,12 @@ import netCDF4 import numpy +import curio + from matplotlib import pyplot from matplotlib.pyplot import show, imshow, title, colorbar -from karmapi import base, sonogram, tpot +from karmapi import base, sonogram, tpot, cpr, pigfarm def load(path): @@ -205,7 +207,55 @@ def model(stamps, values): dt = list(stamps_to_datetime(stamps)) data = pcs(stamps, values) - + +def xxx(stamps, ix, n=10): + + for x in stamps[ix: ix + n]: + print(x) + + print([x % 24 for x in stamps[ix: ix + n]]) + + +def noddy(stamps): + """ FIXME: use this to go through images in order """ + ss = sorted(zip(stamps, + stamps_to_datetime(stamps), + range(len(stamps)))) + for s, d, ix in ss: + yield s, d, ix + + +class World(cpr.NestedWaves): + + def build(self): + """ Create the balls """ + # add a bunch of spheres to the queue + self.balls = [] + last_ball = None + for ball in range(self.n): + size = self.base + (ball * self.inc) + + head = True + + if ball: + head = False + + tail = False + if ball == self.n - 1: + #tail = True + pass + + sphere = cpr.Sphere(size, head=head, tail=tail) + + if not sphere.head: + sphere.last_ball = last_ball + last_ball.next_ball = sphere + + self.uq.put(sphere) + self.balls.append(sphere) + + last_ball = sphere + if __name__ == '__main__': @@ -232,34 +282,55 @@ def model(stamps, values): stamps = df.variables['time'] - args.date = base.parse_date(args.date) + last = 0 + + + print(df.variables) + + noddy(stamps) + + xxx(stamps, 0) - if args.date: - stamps = stamp_filter(stamps, args.date) + for ix, stamp in enumerate(stamps): + if stamp < last: + print(last, stamp) + xxx(stamps, ix-10) + xxx(stamps, ix) + #print([x % 24 for x in stamps[ix-10: ix]]) + #print([x % 24 for x in stamps[ix: ix+10]]) + + last = stamp + + - values = df.variables[args.value] + args.date = base.parse_date(args.date) - path = path / args.value + oldcode = False + if oldcode: + path = path / args.value - if args.pc: - pca = pcs(stamps, values, 48*35) + if args.pc: + pca = pcs(stamps, values, 48*35) - pca.show_fracs(0.1) + pca.show_fracs(0.1) - for x in dir(pca): - print(x) + for x in dir(pca): + print(x) - elif args.delta: - delta(stamps, values) + elif args.delta: + delta(stamps, values) - elif args.model: + elif args.model: - model(stamps, values) + model(stamps, values) - else: - images(path, stamps, values) + else: + images(path, stamps, values) + farm = pigfarm.sty(World) + + curio.run(farm.run(), with_monitor=True) diff --git a/karmapi/pigfarm.py b/karmapi/pigfarm.py index b6e3cba..a629010 100644 --- a/karmapi/pigfarm.py +++ b/karmapi/pigfarm.py @@ -287,7 +287,18 @@ async def show_eric(self): farm.toplevel().withdraw() +def sty(clazz=None, parms={}): + + farm = PigFarm() + + from karmapi.mclock2 import GuidoClock + + farm.add(GuidoClock) + + if clazz: + farm.add(clazz, parms) + return farm class Pig: """ Display piglets, part of a farm From b9d33fa78fe1195e33e3319404a610b59e722bca Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 7 Jun 2018 21:44:00 -0400 Subject: [PATCH 312/642] size should have been width, height? --- karmapi/cpr.py | 56 ++++++++++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 418881a..1475955 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -38,7 +38,7 @@ class Sphere: def __init__(self, size=None, head=False, tail=False, t=0, m=1., r=1.): - size = size or 4 + size = size or (4, 4) grid = [] self.red = [] @@ -55,9 +55,9 @@ def __init__(self, size=None, head=False, tail=False, self.t = t # time moves slower in the inner spheres? - self.sleep = 1 / self.size + self.sleep = 1 / self.size[0] - for pt in range(size * size): + for pt in range(size[0] * size[1]): self.red.append(randunit()) self.green.append(randunit()) self.blue.append(randunit()) @@ -68,7 +68,7 @@ def __init__(self, size=None, head=False, tail=False, def project(self): """ Turn into a PIL? """ - image = Image.new('RGB', (self.size, self.size)) + image = Image.new('RGB', (self.size[0], self.size[1])) # FIXME do the 256 magic int stuff here @@ -104,19 +104,20 @@ async def run(self): nb = self.next_ball lsize = self.last_ball.size - n = self.size + n1, n2 = self.size grid = [] ix = 0 - delta = (1 / (2 * n)) * 2 * math.pi + deltax = (1 / (2 * n1)) * 2 * math.pi + deltay = (1 / (2 * n2)) * 2 * math.pi - for x in range(self.size): - x1 = (x / n) * 2 * math.pi - x2 = x1 + delta + for x in range(self.size[0]): + x1 = (x / n1) * 2 * math.pi + x2 = x1 + deltax - for y in range(self.size): - y1 = (y / n) * 2 * math.pi - y2 = y1 + delta + for y in range(self.size[1]): + y1 = (y / n2) * 2 * math.pi + y2 = y1 + deltay lbc = lb.sample(x1, y1, x2, y2) @@ -125,7 +126,7 @@ async def run(self): else: nbc = tuple(randunit() for c in 'rgb') - cix = (y * self.size) + x + cix = (y * self.size[0]) + x current = (self.red[cix], self.green[cix], self.blue[cix]) value = [(aa + bb + cc) * self.fade @@ -201,23 +202,28 @@ def setup_end(self): def sample(self, x1, y1, x2, y2): """ Return a pixel given a rectangle """ - delta = 1 / self.size - delta *= 2 * math.pi + deltax = 1 / self.size[0] + deltax *= 2 * math.pi + + deltay = 1 / self.size[1] + deltay *= 2 * math.pi xdelta = x2 - x1 ydelta = y2 - y1 - k = int(xdelta / delta) + 1 + k = int(xdelta / deltax) + 1 - xx = int(x1 / delta) + xx = int(x1 / deltax) xx = randint(xx, xx + k - 1) - yy = int(y1 / delta) + yy = int(y1 / deltay) + + k = int(ydelta / deltay) + 1 yy = randint(yy, yy + k - 1) - ix = (yy * self.size) + xx + ix = (yy * self.size[0]) + xx return self.red[ix], self.green[ix], self.blue[ix] async def end_run(self): @@ -232,21 +238,21 @@ async def end_run(self): How to fill in self.grid? """ - n = self.size + n1, n2 = self.size width = 2 * math.pi height = math.pi grid = [] - for x in range(n): - xx = ((x / n) + (1 / (2 * n))) * 2 * math.pi + for x in range(n1): + xx = ((x / n1) + (1 / (2 * n1))) * 2 * math.pi xx += self.inc * self.t - for y in range(n): + for y in range(n2): - yy = (y / n) + (1 / (2 * n)) + yy = (y / n2) + (1 / (2 * n2)) yy += self.inc * self.t rc, rphase, rscale = self.waves['r'] @@ -342,6 +348,8 @@ def build(self): for ball in range(self.n): size = self.base + (ball * self.inc) + size = (size, size) + head = True if ball: From 2ec2f88518faabc38203476b17aaf75c99b416e2 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 8 Jun 2018 12:30:31 -0400 Subject: [PATCH 313/642] better reset for cpr and ncdf in progress --- karmapi/cpr.py | 37 ++++++++++++++------- karmapi/ncdf.py | 88 ++++++++++++++++++++++++++----------------------- 2 files changed, 73 insertions(+), 52 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 1475955..a62014f 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -40,7 +40,6 @@ def __init__(self, size=None, head=False, tail=False, size = size or (4, 4) - grid = [] self.red = [] self.green = [] self.blue = [] @@ -57,14 +56,34 @@ def __init__(self, size=None, head=False, tail=False, # time moves slower in the inner spheres? self.sleep = 1 / self.size[0] + self.reset(init=True) + + + def reset(self, init=False): + """ Reset the sphere """ + + if self.head or self.tail: + self.setup_end() + if self.red: + return + + self.red.clear() + self.green.clear() + self.blue.clear() + + self.random_grid() + + return + + + def random_grid(self): + + size = self.size for pt in range(size[0] * size[1]): self.red.append(randunit()) self.green.append(randunit()) self.blue.append(randunit()) - if self.head or self.tail: - self.setup_end() - return def project(self): """ Turn into a PIL? """ @@ -326,8 +345,8 @@ async def pause(self): async def reset(self): """ Reset waves """ - self.balls[0].setup_end() - self.balls[-1].setup_end() + for ball in self.balls: + ball.reset() async def forward(self): """ Move to next sphere """ @@ -357,8 +376,7 @@ def build(self): tail = False if ball == self.n - 1: - #tail = True - pass + tail = True sphere = Sphere(size, head=head, tail=tail) @@ -483,9 +501,6 @@ def main(): farm = pigfarm.sty(NestedWaves, dict(n=args.n, inc=args.inc, base=args.base)) curio.run(farm.run(), with_monitor=True) - - - if __name__ == '__main__': diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index faa2380..c3bc923 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -216,17 +216,42 @@ def xxx(stamps, ix, n=10): print([x % 24 for x in stamps[ix: ix + n]]) -def noddy(stamps): +def stamp_sort(stamps): """ FIXME: use this to go through images in order """ ss = sorted(zip(stamps, stamps_to_datetime(stamps), range(len(stamps)))) - for s, d, ix in ss: - yield s, d, ix + return ss + +class Shell(cpr.Sphere): + + def __init__(self, df, **kwargs): + + super.__init__(**kwargs) + + # data is some sort of ncdf thing + # set it up so run can just cycle through the + # frames in order. + + # take 3 at a time for r g b + + async def run(self): + + self.t += 1 + + + class World(cpr.NestedWaves): + def __init__(self, parent, stamps, values, **kwargs): + + super().__init__(**kwargs) + + self.stamps = list(stamps) + self.values = values + def build(self): """ Create the balls """ # add a bunch of spheres to the queue @@ -242,10 +267,10 @@ def build(self): tail = False if ball == self.n - 1: - #tail = True + tail = True pass - sphere = cpr.Sphere(size, head=head, tail=tail) + sphere = cpr.Sphere((size, size), head=head, tail=tail) if not sphere.head: sphere.last_ball = last_ball @@ -276,56 +301,37 @@ def build(self): args = parser.parse_args() - path = Path(args.path) + path = Path.home() + Path(args.path) df = load(path / args.raw) stamps = df.variables['time'] - - last = 0 - + values = df.variables[args.value] print(df.variables) + + stamps = stamp_sort(stamps) - noddy(stamps) - - xxx(stamps, 0) - - for ix, stamp in enumerate(stamps): - if stamp < last: - print(last, stamp) - xxx(stamps, ix-10) - xxx(stamps, ix) - #print([x % 24 for x in stamps[ix-10: ix]]) - #print([x % 24 for x in stamps[ix: ix+10]]) - - last = stamp - - - - args.date = base.parse_date(args.date) - - oldcode = False - if oldcode: - path = path / args.value + path = path / args.value - if args.pc: - pca = pcs(stamps, values, 48*35) + if args.pc: + pca = pcs(stamps, values, 48*35) - pca.show_fracs(0.1) + pca.show_fracs(0.1) - for x in dir(pca): - print(x) + for x in dir(pca): + print(x) - elif args.delta: - delta(stamps, values) + elif args.delta: + delta(stamps, values) - elif args.model: + elif args.model: - model(stamps, values) + model(stamps, values) - else: - images(path, stamps, values) + else: + #images(path, stamps, values) + pass farm = pigfarm.sty(World) From 328d82954a41d934b85bc53fcaca5f3da7d11418 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 8 Jun 2018 16:25:10 -0400 Subject: [PATCH 314/642] warped world view through the random haze --- karmapi/ncdf.py | 81 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 69 insertions(+), 12 deletions(-) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index c3bc923..563557d 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -224,11 +224,19 @@ def stamp_sort(stamps): return ss -class Shell(cpr.Sphere): +class WorldView(cpr.Sphere): - def __init__(self, df, **kwargs): + def __init__(self, stamps, values, **kwargs): - super.__init__(**kwargs) + self.stamps = stamps + self.values = values + self.size = self.values[0].shape + self.min = self.values[0].min() + self.max = self.values[0].max() + self.ix = 0 + self.n = len(self.stamps) + + super().__init__(self.size, **kwargs) # data is some sort of ncdf thing # set it up so run can just cycle through the @@ -240,18 +248,62 @@ async def run(self): self.t += 1 + self.next_frame() + + def current(self): + + s, d, ix = self.stamps[self.ix] + + return self.values[ix] + + def next_frame(self): + + self.red = self.scale(self.current()) + + self.forward() + self.green = self.scale(self.current()) + + self.forward() + self.blue = self.scale(self.current()) + self.forward() + + def forward(self): + + self.ix += 1 + + self.ix = self.ix % self.n + def backward(self): -class World(cpr.NestedWaves): + self.ix == 1 + + if self.ix == -1: + self.ix += self.n - def __init__(self, parent, stamps, values, **kwargs): + def scale(self, data): - super().__init__(**kwargs) + #return [randunit() for x in data] + + delta = self.max - self.min + data = [(x - self.min) / delta for x in data.flatten()] + + # map to [-1, 1] interval + data = [max(min((2 * x) - 1.0, 1.0), 0.0) for x in data] + + return data + + +class World(cpr.NestedWaves): + + def __init__(self, parent, stamps=None, values=None, **kwargs): self.stamps = list(stamps) self.values = values + super().__init__(parent) + + def build(self): """ Create the balls """ # add a bunch of spheres to the queue @@ -268,9 +320,12 @@ def build(self): tail = False if ball == self.n - 1: tail = True - pass - - sphere = cpr.Sphere((size, size), head=head, tail=tail) + + + if tail: + sphere = WorldView(self.stamps, self.values) + else: + sphere = cpr.Sphere((size, size), head=head, tail=tail) if not sphere.head: sphere.last_ball = last_ball @@ -301,7 +356,7 @@ def build(self): args = parser.parse_args() - path = Path.home() + Path(args.path) + path = Path.home() / Path(args.path) df = load(path / args.raw) @@ -332,9 +387,11 @@ def build(self): else: #images(path, stamps, values) pass - - farm = pigfarm.sty(World) + print('min max:') + print(values[0].min(), values[0].max()) + + farm = pigfarm.sty(World, dict(stamps=stamps, values=values)) curio.run(farm.run(), with_monitor=True) From e8dbb55dbe432cbebe05161a54e65f6d58706e7d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 8 Jun 2018 16:37:17 -0400 Subject: [PATCH 315/642] making sense of the view --- karmapi/cpr.py | 4 ++-- karmapi/ncdf.py | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index a62014f..e40376d 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -91,7 +91,7 @@ def project(self): # FIXME do the 256 magic int stuff here - print('rgb', len(self.red), len(self.green), len(self.blue)) + #print('rgb', len(self.red), len(self.green), len(self.blue)) image.putdata(self.rgb2grid()) @@ -430,7 +430,7 @@ async def draw(self): # xx = randint(0, self.n - 1) xx = self.dball - print('And the lucky number is:', xx) + #print('And the lucky number is:', xx) ball = self.balls[xx] await self.draw_ball(ball) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 563557d..8a81f7c 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -247,8 +247,9 @@ def __init__(self, stamps, values, **kwargs): async def run(self): self.t += 1 - + self.next_frame() + print(self.current_date()) def current(self): @@ -256,15 +257,23 @@ def current(self): return self.values[ix] + def current_date(self): + + s, d, ix = self.stamps[self.ix] + + return d + def next_frame(self): self.red = self.scale(self.current()) self.forward() - self.green = self.scale(self.current()) + #self.green = self.scale(self.current()) + self.green = [0. for x in self.red] self.forward() - self.blue = self.scale(self.current()) + #self.blue = self.scale(self.current()) + self.blue = [0. for x in self.red] self.forward() From d7834bdf2c751537d08da210fb2cbbfd4c274446 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 8 Jun 2018 18:16:35 -0400 Subject: [PATCH 316/642] option to save images in ncdf land --- karmapi/cpr.py | 2 +- karmapi/ncdf.py | 31 +++++++++++++++++++++++-------- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index e40376d..2e856e6 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -430,7 +430,7 @@ async def draw(self): # xx = randint(0, self.n - 1) xx = self.dball - #print('And the lucky number is:', xx) + print(xx, 'lucky for some') ball = self.balls[xx] await self.draw_ball(ball) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 8a81f7c..51dbbd9 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -230,7 +230,9 @@ def __init__(self, stamps, values, **kwargs): self.stamps = stamps self.values = values + self.save = False self.size = self.values[0].shape + self.size = self.size[1], self.size[0] self.min = self.values[0].min() self.max = self.values[0].max() self.ix = 0 @@ -247,9 +249,13 @@ def __init__(self, stamps, values, **kwargs): async def run(self): self.t += 1 - + self.next_frame() - print(self.current_date()) + now = self.current_date() + print(now) + if self.save: + im = self.project() + im.save(f'{self.save}/{now}.png') def current(self): @@ -268,15 +274,18 @@ def next_frame(self): self.red = self.scale(self.current()) self.forward() - #self.green = self.scale(self.current()) - self.green = [0. for x in self.red] + self.green = self.scale(self.current()) + #self.green = [0. for x in self.red] self.forward() - #self.blue = self.scale(self.current()) - self.blue = [0. for x in self.red] + self.blue = self.scale(self.current()) + #self.blue = [0. for x in self.red] self.forward() + for skip in range(9 * 11): + self.forward() + def forward(self): self.ix += 1 @@ -305,10 +314,12 @@ def scale(self, data): class World(cpr.NestedWaves): - def __init__(self, parent, stamps=None, values=None, **kwargs): + def __init__(self, parent, stamps=None, values=None, + save=None, **kwargs): self.stamps = list(stamps) self.values = values + self.save = save super().__init__(parent) @@ -333,6 +344,7 @@ def build(self): if tail: sphere = WorldView(self.stamps, self.values) + sphere.save = self.save or False else: sphere = cpr.Sphere((size, size), head=head, tail=tail) @@ -362,6 +374,7 @@ def build(self): parser.add_argument('--delta', action='store_true') parser.add_argument('--model', action='store_true') parser.add_argument('--offset', type=int, default=0) + parser.add_argument('--save') args = parser.parse_args() @@ -400,7 +413,9 @@ def build(self): print('min max:') print(values[0].min(), values[0].max()) - farm = pigfarm.sty(World, dict(stamps=stamps, values=values)) + parms = dict(stamps=stamps, values=values, save=args.save) + + farm = pigfarm.sty(World, parms) curio.run(farm.run(), with_monitor=True) From 411eaf1ed8f03793e9742e4ec29908820fde6ff2 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 8 Jun 2018 19:23:03 -0400 Subject: [PATCH 317/642] skip confusion never mind for now ncdf --- karmapi/ncdf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 51dbbd9..0574aa5 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -283,7 +283,7 @@ def next_frame(self): self.forward() - for skip in range(9 * 11): + for skip in range((9 * 11) + 18): self.forward() def forward(self): From d3f9c2a48dcd9aa46ae7be2b834d1e5eac99872f Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 9 Jun 2018 13:10:30 -0400 Subject: [PATCH 318/642] world cup now with added beanstalk --- karmapi/wc.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 467937f..3963938 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -119,7 +119,7 @@ import curio -from karmapi import pigfarm +from karmapi import pigfarm, beanstalk # number of teams @@ -1338,7 +1338,7 @@ class NorthPole(Place): # add a PI Gui? class MexicanWaves(pigfarm.Yard): - def __init__(self, parent, jsf=None, venues=None): + def __init__(self, parent, jsf=None, venues=None, gallery='.'): """ Initialise the thing """ super().__init__(parent) @@ -1442,7 +1442,9 @@ def step_balls(self): def draw(self): - pass + + print(self.beanstalk.image) + self.beanstalk.draw(self.canvas, self.width, self.height, 'red') async def reset(self): """ Reset timer """ @@ -1607,10 +1609,22 @@ async def run(self): score_flashes = await curio.spawn(self.score_flash) self.set_background() + + self.beanstalk = beanstalk.BeanStalk() + self.beanstalk.xx = 0.5 + self.beanstalk.yy = 0.5 + self.beanstalk.x = '' while True: self.canvas.delete('all') + image = self.find_image('1991') + if image: + image = self.load_image(image) + + image = image.resize((int(self.width), int(self.height))) + self.beanstalk.image = image + self.draw() self.step_balls() @@ -1622,6 +1636,7 @@ async def run(self): parser = argparse.ArgumentParser() parser.add_argument('--nopig', action='store_true') +parser.add_argument('--gallery') args = parser.parse_args() if args.nopig: @@ -1632,7 +1647,7 @@ async def run(self): from karmapi.mclock2 import GuidoClock farm.add(GuidoClock) -farm.add(MexicanWaves, dict(jsf=jsf, venues=places)) +farm.add(MexicanWaves, dict(jsf=jsf, venues=places, gallery=args.gallery)) # add a random wc time warper? curio.run(farm.run(), with_monitor=True) From a2c8401eb426d89ac710f9f3101a9e51345aaba0 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 9 Jun 2018 14:12:45 -0400 Subject: [PATCH 319/642] image resize weirdness.. use cpr? --- karmapi/wc.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 3963938..5fb5bfa 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -1443,7 +1443,10 @@ def step_balls(self): def draw(self): - print(self.beanstalk.image) + import time + self.beanstalk.create_time = time.time() + print(self.beanstalk.xx, self.beanstalk.yy) + self.beanstalk.draw(self.canvas, self.width, self.height, 'red') async def reset(self): From 100ffb465066b07a22980975cb55f4233ead6843 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 10 Jun 2018 14:59:15 -0400 Subject: [PATCH 320/642] new setup.py for a new release? --- setup.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index fec45f7..39259b1 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from codecs import open from os import path -__version__ = '0.9.1.0' +__version__ = '0.9.2.0' here = path.abspath(path.dirname(__file__)) @@ -33,8 +33,8 @@ entry_points = { 'console_scripts': [ 'tankrain = karmapi.tankrain:main', - 'orongo = karmapi.orongo:main', - 'currie = karmapi.currie:main', + 'cpr = karmapi.cpr:main', + 'fifawc = karmapi.wc:main', ], }, keywords='data pi karma', From e6231e7cbc0d0b521c361bc5ac2fae3be0e8f194 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 11 Jun 2018 16:38:34 -0400 Subject: [PATCH 321/642] slow fast wc adjustment and beanstalk width height confusion --- karmapi/beanstalk.py | 2 +- karmapi/wc.py | 20 ++++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/karmapi/beanstalk.py b/karmapi/beanstalk.py index 1641bdd..03aa66d 100644 --- a/karmapi/beanstalk.py +++ b/karmapi/beanstalk.py @@ -154,7 +154,7 @@ def is_magic(self): def draw(self, canvas, width, height, colour): xx = self.xx * width - yy = self.yy * width + yy = self.yy * height canvas.create_text( diff --git a/karmapi/wc.py b/karmapi/wc.py index 5fb5bfa..f5642f2 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -680,6 +680,7 @@ def __init__(self, groups, places=None, dates=None, now=None): self.now = now or datetime(2018, 6, 14) self.start = self.now self.step = timedelta(hours=1) + self.sleep = 0.05 self.games = curio.PriorityQueue() self.events = curio.UniversalQueue() @@ -876,7 +877,7 @@ async def run(self): else: await self.games.put(game) - await curio.sleep(0) + await curio.sleep(self.sleep) class Place: @@ -1357,15 +1358,15 @@ def __init__(self, parent, jsf=None, venues=None, gallery='.'): self.scan_venues(venues) self.add_event_map('r', self.reset) - self.add_event_map('s', self.slower) - self.add_event_map('w', self.faster) + self.add_event_map('S', self.slower) + self.add_event_map('W', self.faster) async def slower(self): - """ Go slower """ + """ Go through time more slowly """ self.delta_t /= 2 async def faster(self): - """ Go faster """ + """ Go through time more quickly """ self.delta_t *= 2 def scan_venues(self, venues): @@ -1623,9 +1624,11 @@ async def run(self): image = self.find_image('1991') if image: + print(image) image = self.load_image(image) - - image = image.resize((int(self.width), int(self.height))) + print(image.size) + image = image.resize((int(self.height), int(self.width))) + print(image.size, self.width, self.height) self.beanstalk.image = image self.draw() @@ -1633,7 +1636,8 @@ async def run(self): self.step_balls() self.jsf.now = self.when - + + print('sleeping', self.sleep) await curio.sleep(self.sleep) From 0bbd8d5b898af1e9e3d9b30da07044ffe2b6e6d1 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 11 Jun 2018 22:24:18 -0400 Subject: [PATCH 322/642] installing on Ubuntu Bionic Beaver --- docs/install.rst | 515 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 515 insertions(+) create mode 100644 docs/install.rst diff --git a/docs/install.rst b/docs/install.rst new file mode 100644 index 0000000..54ceb87 --- /dev/null +++ b/docs/install.rst @@ -0,0 +1,515 @@ +================= + Install Process +================= + +If you are trying to install on Ubuntu 18.04 the following dialogue +may help. + +Short version:: + + python3.6 -m pip install karmapi + + +If that fails read on. + +Preliminaries +============= + +Hi Colin, + +I hope this finds you well. + +I have been working on some code to simulate and visualise waves +propagating through nested spheres. + +I have it at the stage where it at least produces pretty images. You +can find the code here: + +https://github.com/swfiua/karmapi/blob/master/karmapi/cpr.py + +It is at early stages for now, but soon should be able to include +modelling of time passing at different radii. + +Once I get the code closer I expect to see some fascinating patterns emerging. + +The goal is to be able to simulate the changing waves emerging from +the vicinity of a neutron star. + +Once I have that we can then embed these in De Sitter space, per your +book/Gamma Ray paper and explore how the changing waves may interact. + +So one of my next steps is to take another look at the Gamma Ray paper. + +All the best. + +Johnny + + + +Colin Jun 7 (4 days ago) to me +===================================== + +Hi + +Just tried to run cpr.py. I copied the code and added: + +#! /usr/bin/env python + +at the top to call python. I got:: + + cpr@poincare ~ 12:11pm > ./cpr.py + File "./cpr.py", line 92 + async def run(self): + ^ + SyntaxError: invalid syntax + +Did I do something silly? Let me know when you'll be around and I'll +make the effort to come to the dept and chat. + +Cheers + + +Jun 7 (4 days ago) to Colin +=========================== + +Hi Colin, + +That's great that you tried to run it. + +Nothing silly it looks like you are getting python 2.7 which is still +the default on a lot of linuxes. + +The code requires python3.6 and other bits from karmapi, which in turn +depends on some other libraries. + +git clone https://github.com/swfiua/karmapi + +will get you the latest version of all the code. + +I've just added a bin/karma script to the code that tries to run with +python3 -- hopefully 3.6+ + +I'd be curious what sort of error message that generates -- but may be +simpler to do this stuff when I am there. + +I expect it will be some time the first week of July that I will be at +Warwick -- will update when I have firmer plans. + +I hope by then to have the installation of karmapi a little smoother. +And with luck some interesting things to see. + +All the best. + +Johnny + + +Colin Jun 8 (3 days ago) to me +===================================== + +git doesn't mean anything to my machine (Ubuntu 16.04LTS). Do you know +the linux command to collect the files and install them? I can collect +them with wget but would have to guess where to put them and how to +configure (if necessary). C + + +Jun 8 (3 days ago) to Colin +=========================== + +I think it might be best to wait until we meet to see how best to get +this going on your machine -- or maybe find someone your end who knows +a little about python and git. + +In the meanwhile I will do another release of the code to the python +packaging system which ought to make it easier to install. + +If you can upgrade to Ubuntu 18.04 LTS that will get you python3.6 +which should also simplify the process and ensure we are running the +same python. + +You can get git installed with "sudo apt install git". + +Thanks very much for trying with the code. + +Johnny + + +Colin Jun 9 (2 days ago) to me +===================================== + +I've upgraded to UBUNTU 18.04 BUT:: + + cpr@poincare ~ 5:16pm > /usr/bin/env python --version + Python 2.7.15rc1 + cpr@poincare ~ 5:17pm > + +So how do I upgrade to python 3.6 from here? + + +swfiua@gmail.com Jun 9 (2 days ago) to Colin +=============================================================== + +OK, this is good. + +18.04 has both python2.7 and python3.6 + +But 2.7 is still the default, so just type python3 and you should get python 3.6 + +I am going to work on the install for this stuff over the weekend, so +it is probably going to be worth waiting for that. + +But meanwhile: + +sudo apt install git + +and + +git clone https://github.com/swfiua/karmapi + +Will get you the latest karmapi. + +Once you have that you will be able to update to my latest with a simple "git pull" + +Good luck. + +Johnny + + +Colin Jun 10 (1 day ago) to me +===================================== + +I already cloned your karmapi directory and you're roght about python: + +cpr@poincare ~ 10:13am > /usr/bin/env python3 --version +Python 3.6.5 + +Changing the top line of cpr.py to + +##! /usr/bin/env python3 + +gets rid of the syntax error, but now I get: + +cpr@poincare ~ 10:07am > ./cpr.py +Unmatched '"'. + +which is very odd because I checked and they all match. I must have a +corrupted input file .... any ideas? + + +Colin 12:25 PM (23 hours ago)to me +========================================= + +Or maybe I've put your karmapi directory in a silly place. It is in my +home directory where cpr.py is running. C + + +4:23 PM (19 hours ago) to Colin +=============================== + +The unmattched " is a bit of a mystery. + +I have done a release of the project to the python package land. + +You should be able to install this release with: + +python3.6 -m pip install karmapi + +This should download the dependencies and installs everything. + +Once it is done you should be able to do: + +python3.6 -m karmapi.cpr + +And the cpr code should run. + +Good luck! + +Johnny + + +Colin 7:34 AM (4 hours ago) to me +======================================== + +Not out of the woods yet! : + +cpr@poincare ~ 12:32pm > python3.6 -m pip install karmapi +/usr/bin/python3.6: No module named pip +cpr@poincare ~ 12:32pm > + + +swfiua@gmail.com 9:22 AM (2 hours ago) to Colin +================================================================== + +Oh my... I thought that one was fixed these days. + +There is a chicken and egg problem with python packaging: you have to install the pip (python install package) module before you can install packages. + +But pip itself is a package -- I thought it was now bundled with the core python, but apparently not. + +sudo apt install python3-pip + +Should get you the pip module. + +I'm afraid the code is going to be super disappointing after all this. + +Johnny + + +Colin Rourke10:59 AM (45 minutes ago) to me +=========================================== + +STILL not out of the woods:: + + cpr@poincare ~ 3:42pm > python3.6 -m karmapi.cpr + Traceback (most recent call last): + File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main + "__main__", mod_spec) + File "/usr/lib/python3.6/runpy.py", line 85, in _run_code + exec(code, run_globals) + File + "/home/cpr/.local/lib/python3.6/site-packages/karmapi/cpr.py", + line 30, in + from PIL import Image, ImageTk + File + "/home/cpr/.local/lib/python3.6/site-packages/PIL/ImageTk.py", + line 31, in + import tkinter + ModuleNotFoundError: No module named 'tkinter' + cpr@poincare ~ 3:42pm > python3.6 -m pip install tkinter + Collecting tkinter + Could not find a version that satisfies the requirement tkinter (from versions: ) + No matching distribution found for tkinter + cpr@poincare ~ 3:43pm > sudo apt install python3-tkinter + Reading package lists... Done + Building dependency tree + Reading state information... Done + E: Unable to locate package python3-tkinter + +This is very odd because tkinter is a key module for a python program +labelpin that was written to go with my labelling package pinlabel so I +know it's on my computer. It's obviously a version problem. How do I +trick python/tkinter into accepting a module written for python2 ??? + + +swfiua@gmail.com 11:11 AM (33 minutes ago) to Colin +====================================================================== + +Try: + +sudo apt install python3-tk + +So this goes back to the default python on Ubuntu is still python2.7 +-- so Ubuntu base install gives you everything you need for python2.7 + +For 3.6 it has all the packages available, but some fairly basic stuff +isn't there. + +I use tk for simple user interfaces mainly because I thought it would +always be there :( + +With luck you will get to run some see some of these soon. + +Then we are into a whole different world of problems. + +Johnny + + +Colin 11:20 AM (24 minutes ago) to me +============================================ + +I already found the tk-install command and I had to do this with version +2 as well for labelpin to run. I also had to install pyaudio and now +cpr.py runs:: + + + cpr@poincare ~ 4:09pm > python3.6 -m karmapi.cpr + pigfarm adding dict_keys([]) + pigfarm adding dict_keys(['n', 'inc', + 'base']) + + spawning + + building piglet: + core pig creating self.event_queue + Creating Pig with event queue + + built + building piglet: + core pig creating self.event_queue + Creating Pig with event queue + + built <__main__.NestedWaves object + at 0x7efcd5e6d908> + + +BUT all I get is a blank tk terminal and no real output. What next? + + +Colin 11:31 AM (13 minutes ago) to me +===================================== + +Hold on. If I type pig I get a varying screen colour and if I type +piglet I get a lulti-coloured clock. Can I have a list of commands? + + +Colin 11:37 AM (7 minutes to me +================================ + +Hold on again. I just noticed another error on the main terminal:: + + File "/home/cpr/.local/lib/python3.6/site-packages/karmapi/eric.py", + line 49, in + from idlelib import pyshell + ModuleNotFoundError: No module named 'idlelib' + + +And this time I get: + +cpr@poincare ~ 4:32pm > sudo apt install python3-idlelib +[sudo] password for cpr: +Reading package lists... Done +Building dependency tree +Reading state information... Done +E: Unable to locate package python3-idlelib + +???? + +swfiua@gmail.com 11:38 AM (6 minutes ago) to Colin +===================================================================== + +sudo apt install idle-python3.6 + + +swfiua@gmail.com 11:37 AM (7 minutes ago) to Colin +==================================================================== + +type 'h' at any time for a list of keypresses that might do things. + +the idea is 'n' and 'p' take you to next and previous widgets. + +I usually throw in the clock -- it's mostly Guido van Rossum's code, +he had a clock like that at home growing up. + +One other thing, type 'e' and it will show you the code for the module +using Idle, python's build in editor. + +(oh great just seen latest email -- built in editor is AWOL) + +The varying coloured screen is the NestedWave thing. + +The defaults have waves in the inner and outer spheres and then random +data in between. + +As the spheres are stepped the waves propogate. + +Johnny + + + +Colin 3:07 PM (2 hours ago) +=========================== + +to me +Well it's all installed and running. Send me instructions for getting +the most interesting pictures. And explain the connection with the new +paradigm! C + + +swfiua@gmail.com +4:59 PM (23 minutes ago) +to Colin +python3 -m karmapi.cpr -n 10 --inc 10 --base 100 + +Will give you 10 nested spheres. The inner sphere has a 100x100 grid. + +The next 110x110 .. adding 10 to the grid size as you go out. + +On my machine it is a little slow at this resolution. If it is too +slow, drop the base number to say 50. + +Once you see an image j and k will step you through the layers. + +Oh and 'r' is useful: it re-randomises everything so you can watch how +things settle down. + +I tend to run it with the tk window filling half the screen and the +console so I can see the print's littered in the code. + +I found with these parameters you see some stunning patterns emerging. + +Now these are to some degree artifacts of my coding, in particular how +I update the inner spheres. + +You will see square patterns in the images: I give equal weight to all +cells in the inner/outer spheres that lie in a square centred around +the point. + +At this point there is nothing from paradigm in how the code works, +but there are some hooks to help add this in. + +The plan is to set the mass and the radii of each spherical shell and +so be able to have waves propogate at different rates based on +relative time. + +So, I think the way forward from here is to look at geodesics as per +the gamma ray paper. + +I am going to be giving a talk to the python group back here in Ottawa +in late July, so I hope to have something closer to the paradigm by +then. + +Johnny + + +swfiua@gmail.com 5:15 PM (7 minutes ago) to Colin +==================================================================== + + +Forgot to say, the patterns on the inner spheres tend to converge to a +fixed pattern if you let it run long enough. Or maybe it is something +like Conway's game of life. I just let it run and it has ended up all +black. So file that one under bugs? + +Also, all the inner spheres seem to converge to the same pattern. + +Again, all just artifacts of the code (and the quantisation that is +going on too and the order in which I do updates) and bugs, lots of +those. + +The key bits of code for the images are in the cpr.Sphere object. + +The run, end_run and sample methods. + +Johnny + +PS there is an unfortunate typo in the help message you get when you +type 'h' on Guido's clock. + +Post Install +============ + +If you want to take a look at the latest code:: + + git clone https://github.com/karmapi/swfiua + +This should give you a folder, *karmapi*:: + + cd karmapi + +If you want to install that version under the local user try:: + + python3 setup.py install --user + +To refresh to the latest code on github:: + + git pull + + +Raspberry Pi +============ + +That is a whole other adventure. + +But Raspbian Stretch may have python 3.6. Fingers crossed. From 4b71e46752bd68207bea55109f64487b6be66d72 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 12 Jun 2018 11:23:17 -0400 Subject: [PATCH 323/642] reduce requirements and collections for cpr --- karmapi/cpr.py | 4 ++++ karmapi/hush.py | 7 +++++-- karmapi/zen.py | 2 +- requirements.txt | 4 ++-- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 2e856e6..b3eabce 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -23,6 +23,8 @@ import argparse +from collections import deque, defaultdict, Counter, namedtuple + import curio import numpy @@ -45,6 +47,8 @@ def __init__(self, size=None, head=False, tail=False, self.blue = [] self.size = size + self.history = None + self.delta = False self.head = head self.tail = tail diff --git a/karmapi/hush.py b/karmapi/hush.py index 990c218..00e7c26 100644 --- a/karmapi/hush.py +++ b/karmapi/hush.py @@ -87,8 +87,12 @@ from matplotlib import pyplot +try: + import pyaudio + FORMAT = pyaudio.paInt16 +except: + FORMAT = None -import pyaudio import wave import numpy as np @@ -96,7 +100,6 @@ CHUNK = 1024 * 4 #CHUNK = 256 * 1 -FORMAT = pyaudio.paInt16 CHANNELS = 2 RATE = 44100 RECORD_SECONDS = 5 diff --git a/karmapi/zen.py b/karmapi/zen.py index b5246e5..c90615d 100644 --- a/karmapi/zen.py +++ b/karmapi/zen.py @@ -69,4 +69,4 @@ import this -import blockchain +#import blockchain diff --git a/requirements.txt b/requirements.txt index 5543f2d..8ad2573 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,7 +5,7 @@ pandas # this might provide matplotib #pyaudio # for sound curio # for async magic -blockchain # for trust and meta data exchange +#blockchain # for trust and meta data exchange Pillow # pillow for PIL for images @@ -19,6 +19,6 @@ pytest # to run the test(s) hypothesis # needed to make writing tests fun -requests # seems to be miss +requests # seems to be missing from core python From 79eb197cfffc130a238ec948b10de931778c6841 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 12 Jun 2018 11:37:55 -0400 Subject: [PATCH 324/642] install bash karma note --- docs/install.rst | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/docs/install.rst b/docs/install.rst index 54ceb87..4cb2583 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -506,7 +506,35 @@ To refresh to the latest code on github:: git pull +I have this little function devined in .bashrc:: + function karma + { + module=karmapi.$* + python3.6 -m $module + } + +Which allows me to type things like:: + + karma cpr + + karma currie + + karma zen + + karma wc + +To get help on options that may be available:: + + karma cpr -h + +Many karma pi modules can be run this way. + +Check the code to see what the options actually do. + +The *argparse* module is used for option parsing. + + Raspberry Pi ============ From 78ad82036ba1904d4e70df8ee3f1c5214ca2113f Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 14 Jun 2018 10:51:16 -0400 Subject: [PATCH 325/642] world cup release: on time or 4 years early? --- karmapi/wc.py | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index f5642f2..9790232 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -1359,7 +1359,13 @@ def __init__(self, parent, jsf=None, venues=None, gallery='.'): self.add_event_map('r', self.reset) self.add_event_map('S', self.slower) - self.add_event_map('W', self.faster) + self.add_event_map('m', self.toggle_show_games) + self.add_event_map('g', self.toggle_show_groups) + self.add_event_map('t', self.toggle_show_teams) + + self.game_view = False + self.team_view = False + self.group_view = False async def slower(self): """ Go through time more slowly """ @@ -1369,6 +1375,18 @@ async def faster(self): """ Go through time more quickly """ self.delta_t *= 2 + async def toggle_show_games(self): + """ Toggle matches view """ + self.game_view = not self.game_view + + async def toggle_show_teams(self): + """ Toggle teams view """ + self.game_view = not self.team_view + + async def toggle_show_groups(self): + """ Toggle groups view """ + self.game_view = not self.group_view + def scan_venues(self, venues): """ Set the lat lon bounds for the canvas """ self.places = places = list(venues.values()) @@ -1435,9 +1453,19 @@ def step_balls(self): self.show_score_flashes() - self.show_tables() + if self.game_view: + self.show_games() + + if self.team_view: + self.show_teams() - self.show_knockout() + if self.group_view: + self.show_groups() + + if not self.group_view and not self.team_view and not self.game_view: + self.show_tables() + + self.show_knockout() self.when += timedelta(hours=self.delta_t) @@ -1553,6 +1581,9 @@ def show_tables(self): fill='cyan') yy -= 0.025 + def show_games(self): + pass + def show_knockout(self): if not self.jsf.knockout: From 4729dd45de262aa794a930556b59e6160986d93c Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 14 Jun 2018 11:57:48 -0400 Subject: [PATCH 326/642] show game list for wc --- karmapi/tankrain.py | 2 +- karmapi/wc.py | 31 +++++++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index 5d955ae..6d0aac4 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -303,7 +303,7 @@ def main(args=None): parser.add_argument('--pig', action='store_false', default=True) parser.add_argument('--minutes', type=int, default=30) - parser.add_argument('path', nargs='?', default='~/karmapi/tankrain') + parser.add_argument('path', nargs='?', default='.') parser.add_argument('--version', default='') parser.add_argument('--date') diff --git a/karmapi/wc.py b/karmapi/wc.py index 9790232..a9f41c1 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -307,6 +307,10 @@ def __init__(self, a, b, when, where=None, ascore=None, bscore=None): Game.NUMBER += 1 + def __hash__(self): + + return id(self) + def reset(self): """ Reset score if it was random """ if self.simulated: @@ -774,6 +778,18 @@ def generate_teams(self): for team in group.teams: yield team + def generate_games(self): + """ Generate games """ + games = set() + + for team in self.generate_teams(): + for game in team.games: + games.add(game) + + for game in sorted(games): + yield game + + def apres_match(self, game): """ Deal with updating of knockout stage """ @@ -984,7 +1000,7 @@ class Sochi(Place): lon = 39 + (57 / 60) class NorthPole(Place): - """ """ + """ Where teams go when out? """ name = 'North Pole' lat = 90 @@ -1582,7 +1598,18 @@ def show_tables(self): yy -= 0.025 def show_games(self): - pass + + xx = 0.2 + yy = 0.05 + + for game in self.jsf.generate_games(): + print(game) + + self.message(msg=str(game), + xx=xx, yy=yy, fill='pink') + + yy += 0.025 + def show_knockout(self): From 1b494f3e7cf0c6ab0d03cd1531ca4dd5957ee263 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 14 Jun 2018 11:58:08 -0400 Subject: [PATCH 327/642] event log for wc --- karmapi/wc.csv | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 karmapi/wc.csv diff --git a/karmapi/wc.csv b/karmapi/wc.csv new file mode 100644 index 0000000..eaaa2eb --- /dev/null +++ b/karmapi/wc.csv @@ -0,0 +1,5 @@ +year, month, day, hour, minute, ateam, bteam, what, team, player +2018, 6, 14, 15, 11, rus, sau, goal, rus, 8 +2018, 6, 14, 15, 22, rus, sau, off, rus, 9 +2018, 6, 14, 15, 22, rus, sau, on, rus, 6 +2018, 6, 14, 15, 42, rus, sau, goal, rus, 5 From 9a199fc1bae7e190ea86ed7842d09b0693b22010 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 14 Jun 2018 13:32:04 -0400 Subject: [PATCH 328/642] stats for wc first game and more --- karmapi/wc.csv | 7 +++++-- karmapi/wc.py | 53 +++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 53 insertions(+), 7 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index eaaa2eb..e1c9e65 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -1,5 +1,8 @@ year, month, day, hour, minute, ateam, bteam, what, team, player 2018, 6, 14, 15, 11, rus, sau, goal, rus, 8 -2018, 6, 14, 15, 22, rus, sau, off, rus, 9 -2018, 6, 14, 15, 22, rus, sau, on, rus, 6 2018, 6, 14, 15, 42, rus, sau, goal, rus, 5 +2018, 6, 14, 15, 71, rus, sau, goal, rus, 22 +2018, 6, 14, 15, 88, rus, sau, yellow, rus, 17 +2018, 6, 14, 15, 88, rus, sau, goal, rus, 6 +2018, 6, 14, 15, 88, rus, sau, goal, rus, 11 + diff --git a/karmapi/wc.py b/karmapi/wc.py index a9f41c1..0b8e395 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -145,6 +145,7 @@ def __init__(self, name=None, win=None): def reset(self): self.points = 0 + self.played = 0 self.yellow = 0 self.red = 0 self.goals = 0 @@ -167,7 +168,8 @@ def where(self, when): """ Where is the team? """ if self.home is not None: - return self.home + self.lat, self.lon = self.home.lat, self.home.lon + return self.lat, self.lon last_game = None next_game = None @@ -203,6 +205,7 @@ def __str__(self): def stats(self): return dict( + played = self.played, points = self.points, goals = self.goals, against = self.against, @@ -215,6 +218,7 @@ def statto(self): stats = self.stats() msg = "%s" % self.name + msg += " {played:4d}".format(**stats) msg += " {points:4d} {goal_delta:4d}".format(**stats) msg += " {goals:4d} {against:4d}".format(**stats) @@ -621,6 +625,9 @@ def reset(self): for team in self.teams: team.reset() + self.played = 0 + + def table(self): """ Show the group table """ teams = self.get_table() @@ -799,6 +806,9 @@ def apres_match(self, game): if game.number == 64: print('Winner:', game.winner()) return + + game.a.played += 1 + game.b.played += 1 if game.is_group(): group = game.group @@ -818,10 +828,9 @@ def apres_match(self, game): steam.games.append(game) for team in group.teams: - out = Game(None, None, game.when, where=NorthPole()) if team not in (wteam, steam): print('out', team) - team.games.append(out) + team.go_home() else: kgame, label = self.winners[game.number] @@ -1378,10 +1387,13 @@ def __init__(self, parent, jsf=None, venues=None, gallery='.'): self.add_event_map('m', self.toggle_show_games) self.add_event_map('g', self.toggle_show_groups) self.add_event_map('t', self.toggle_show_teams) + self.add_event_map('j', self.previous_group) + self.add_event_map('k', self.next_group) self.game_view = False self.team_view = False self.group_view = False + self.which_group = 0 async def slower(self): """ Go through time more slowly """ @@ -1401,7 +1413,22 @@ async def toggle_show_teams(self): async def toggle_show_groups(self): """ Toggle groups view """ - self.game_view = not self.group_view + self.group_view = not self.group_view + + async def next_group(self): + """ Go to next group """ + self.which_group += 1 + + if self.which_group == len(self.jsf.groups): + self.which_group = 0 + + async def previous_group(self): + """ Go to previous group """ + self.which_group -= 1 + + if self.which_group < 0: + self.which_group += len(self.jsf.groups) + def scan_venues(self, venues): """ Set the lat lon bounds for the canvas """ @@ -1597,6 +1624,23 @@ def show_tables(self): fill='cyan') yy -= 0.025 + def show_groups(self): + + xx = 0.6 + yy = 0.05 + + which = chr(self.which_group + ord('a')) + + group = self.jsf.groups[which] + + for game in group.games: + + self.message(msg=str(game), + xx=xx, yy=yy, fill='magenta') + + yy += 0.025 + + def show_games(self): xx = 0.2 @@ -1610,7 +1654,6 @@ def show_games(self): yy += 0.025 - def show_knockout(self): if not self.jsf.knockout: From 812d0cf6d1433179f37ba964b79450608b685dd5 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 15 Jun 2018 12:58:07 -0400 Subject: [PATCH 329/642] world cup 3 games in pondering game enhancements --- karmapi/wc.csv | 21 ++++++++++++++++++--- karmapi/wc.py | 26 ++++++++++++++------------ 2 files changed, 32 insertions(+), 15 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index e1c9e65..1dff86d 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -1,8 +1,23 @@ year, month, day, hour, minute, ateam, bteam, what, team, player -2018, 6, 14, 15, 11, rus, sau, goal, rus, 8 +2018, 6, 14, 15, 0, rus, sau, ko, 0, 0 2018, 6, 14, 15, 42, rus, sau, goal, rus, 5 +2018, 6, 14, 15, 45, rus, sau, ht, 2, 0 2018, 6, 14, 15, 71, rus, sau, goal, rus, 22 2018, 6, 14, 15, 88, rus, sau, yellow, rus, 17 -2018, 6, 14, 15, 88, rus, sau, goal, rus, 6 -2018, 6, 14, 15, 88, rus, sau, goal, rus, 11 +2018, 6, 14, 15, 91, rus, sau, goal, rus, 6 +2018, 6, 14, 15, 94, rus, sau, goal, rus, 11 +2018, 6, 14, 15, 95, rus, sau, ft, 5, 0 + +2018, 6, 15, 14, 89, egy, urg, goal, urg, 2 +2018, 6, 15, 14, 93, egy, urg, yellow, egy, 5 +2018, 6, 15, 14, 96, egy, urg, yellow, egy, 6 +2018, 6, 15, 14, 96, egy, urg, ft, 1, 0 + +2018, 6, 15, 15, 0, mor, ira, ko, 0, 0 +2018, 6, 15, 15, 10, mor, ira, yellow, ira, 7 +2018, 6, 15, 15, 30, mor, ira, yellow, ira, 8 +2018, 6, 15, 15, 45, mor, ira, ht, 0, 0 +2018, 6, 15, 15, 47, mor, ira, yellow, ira, 18 +2018, 6, 15, 15, 94, mor, ira, goal, ira, 122 +2018, 6, 15, 15, 96, mor, ira, ft, 1, 0 diff --git a/karmapi/wc.py b/karmapi/wc.py index 0b8e395..07c4c34 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -691,7 +691,7 @@ def __init__(self, groups, places=None, dates=None, now=None): self.now = now or datetime(2018, 6, 14) self.start = self.now self.step = timedelta(hours=1) - self.sleep = 0.05 + self.sleep = 0.01 self.games = curio.PriorityQueue() self.events = curio.UniversalQueue() @@ -1090,11 +1090,11 @@ class NorthPole(Place): games = [ Game(rus, sau, datetime(2018, 6, 14, 15, 0), where=places['moscow'], - ascore=4, bscore=0), + ascore=5, bscore=0), Game(egy, urg, datetime(2018, 6, 15, 12, 0), where=places['yekaterinburg'], - ascore=1, bscore=2), + ascore=0, bscore=1), Game(rus, egy, datetime(2018, 6, 19, 18, 0), @@ -1118,11 +1118,11 @@ class NorthPole(Place): games = [ Game(mor, ira, datetime(2018, 6, 15, 15, 0), where=places['stpetersberg'], - ascore=2, bscore=2), + ascore=0, bscore=1), Game(por, spa, datetime(2018, 6, 15, 18, 0), where=places['sochi'], - ascore=3, bscore=2), + ascore=None, bscore=None), Game(por, mor, datetime(2018, 6, 20, 12, 0), @@ -1145,11 +1145,11 @@ class NorthPole(Place): games = [ Game(fra, aus, datetime(2018, 6, 16, 10, 0), where=places['kazan'], - ascore=1, bscore=2), + ascore=None, bscore=None), Game(per, den, datetime(2018, 6, 16, 14, 0), where=places['saransk'], - ascore=2, bscore=2), + ascore=None, bscore=None), Game(den, aus, datetime(2018, 6, 21, 12, 0), @@ -1173,7 +1173,7 @@ class NorthPole(Place): games = [ Game(arg, ice, datetime(2018, 6, 16, 13, 0), where=places['spartak'], - ascore=3, bscore=2), + ascore=None, bscore=None), Game(cro, nig, datetime(2018, 6, 16, 19, 0), where=places['kaliningrad'], @@ -1202,7 +1202,7 @@ class NorthPole(Place): games = [ Game(crc, ser, datetime(2018, 6, 17, 12, 0), where=places['samara'], - ascore=2, bscore=4), + ascore=None, bscore=None), Game(bra, swi, datetime(2018, 6, 17, 18, 0), where=places['rostovondon'], @@ -1229,11 +1229,11 @@ class NorthPole(Place): games = [ Game(ger, mex, datetime(2018, 6, 17, 15, 0), where=places['moscow'], - ascore=1, bscore=2), + ascore=None, bscore=None), Game(swe, sko, datetime(2018, 6, 18, 12, 0), where=places['novgorod'], - ascore=3, bscore=2), + ascore=None, bscore=None), Game(sko, mex, datetime(2018, 6, 23, 15, 0), @@ -1384,6 +1384,7 @@ def __init__(self, parent, jsf=None, venues=None, gallery='.'): self.add_event_map('r', self.reset) self.add_event_map('S', self.slower) + self.add_event_map('M', self.faster) self.add_event_map('m', self.toggle_show_games) self.add_event_map('g', self.toggle_show_groups) self.add_event_map('t', self.toggle_show_teams) @@ -1395,6 +1396,7 @@ def __init__(self, parent, jsf=None, venues=None, gallery='.'): self.group_view = False self.which_group = 0 + async def slower(self): """ Go through time more slowly """ self.delta_t /= 2 @@ -1739,7 +1741,7 @@ async def run(self): self.jsf.now = self.when print('sleeping', self.sleep) - await curio.sleep(self.sleep) + await curio.sleep(0) parser = argparse.ArgumentParser() From d7fed8236ad8555155e6240bfd2dd27d4ecafc83 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 15 Jun 2018 17:26:48 -0400 Subject: [PATCH 330/642] table tinkering and portugal spain goal fest --- karmapi/wc.csv | 14 ++++++++++++++ karmapi/wc.py | 16 ++++++++-------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index 1dff86d..b7242d6 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -21,3 +21,17 @@ year, month, day, hour, minute, ateam, bteam, what, team, player 2018, 6, 15, 15, 94, mor, ira, goal, ira, 122 2018, 6, 15, 15, 96, mor, ira, ft, 1, 0 + +2018, 6, 15, 18, 0, por, spa, ko, 0, 0 +2018, 6, 15, 18, 4, por, spa, goal, por, 7 +2018, 6, 15, 18, 17, por, spa, yellow, spa, 5 +2018, 6, 15, 18, 24, por, spa, goal, spa, 19 +2018, 6, 15, 18, 28, por, spa, yellow, por, 16 +2018, 6, 15, 18, 44, por, spa, goal, por, 7 +2018, 6, 15, 18, 0, por, spa, ht, 2, 1 +2018, 6, 15, 18, 55, por, spa, goal, spa, 19 +2018, 6, 15, 18, 58, por, spa, goal, spa, 4 +2018, 6, 15, 18, 88, por, spa, goal, por, 7 +2018, 6, 15, 18, 0, por, spa, ft, 3, 3 + + diff --git a/karmapi/wc.py b/karmapi/wc.py index 07c4c34..630e261 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -1599,17 +1599,17 @@ def message(self, msg=None, where=None, fill='red', size=5, xoff=0, yoff=0, def show_tables(self): position = [ - [.05, .1], - [.15, .1], + [.10, .1], + [.25, .1], - [.05, .25], - [.15, .25], + [.10, .25], + [.25, .25], - [.85, .75], - [.95, .75], + [.75, .75], + [.90, .75], - [.85, .9], - [.95, .9], + [.75, .9], + [.90, .9], ] for label, group in self.jsf.groups.items(): From 7c29710e6d59262674f6e4084d0437ae08ce7bac Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 16 Jun 2018 18:47:32 -0400 Subject: [PATCH 331/642] more data than code for wc --- karmapi/wc.csv | 192 +++++++++++++++++++++++++++++++++++++++++++++++++ karmapi/wc.py | 70 +++++++++++++----- 2 files changed, 245 insertions(+), 17 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index b7242d6..4c44036 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -34,4 +34,196 @@ year, month, day, hour, minute, ateam, bteam, what, team, player 2018, 6, 15, 18, 88, por, spa, goal, por, 7 2018, 6, 15, 18, 0, por, spa, ft, 3, 3 +2018, 6, 16, 10, 0, fra, aus, ko, 0, 0 +2018, 6, 13, 10, 13, fra, aus, yellow aus, 7 +2018, 6, 16, 10, 45, fra, aus, ht, 0, 0 +2018, 6, 16, 10, 57, fra, aus, yellow aus, 19 +2018, 6, 16, 10, 58, fra, aus, goal, fra, 7 +2018, 6, 16, 10, 62, fra, aus, goal, aus, 15 +2018, 6, 16, 10, 57, fra, aus, yellow fra, 12 +2018, 6, 16, 10, 80, fra, aus, goal, fra, 6 +2018, 6, 16, 10, 87, fra, aus, yellow aus, 16 +2018, 6, 16, 10, 96, fra, aus, ft, 2, 1 +2018, 6, 16, 13, 0, arg, ice, ko, 0, 0 +2018, 6, 16, 13, 19, arg, ice, goal, arg, 19 +2018, 6, 16, 13, 23, arg, ice, goal, ice, 11 +2018, 6, 16, 13, 45, arg, ice, ht, 1, 1 +2018, 6, 16, 13, 90, arg, ice, ft, 1, 1 + +2018, 6, 16, 14, 0, PER, DEN, ko, 0, 0 +2018, 6, 16, 14, 38, PER, DEN, yellow, per, 13 +2018, 6, 16, 14, 45, PER, DEN, ht, 0, 0 +2018, 6, 16, 14, 58, PER, DEN, goal, per, 20 +2018, 6, 16, 14, 86, PER, DEN, yellow, den, 8 +2018, 6, 16, 14, 93, PER, DEN, yellow, den, 20 +2018, 6, 16, 14, 94, PER, DEN, ft, 0, 1 + +2018, 6, 16, 19 0, CRO, NIG, ko, 0, 0 +2018, 6, 16, 19 30, CRO, NIG, yellow, cro, 7 +2018, 6, 16, 19 32, CRO, NIG, goal, cro, 108 +2018, 6, 16, 19 45, CRO, NIG, ht, 0, 0 +2018, 6, 16, 19 70, CRO, NIG, yellow, nig, 5 +2018, 6, 16, 19 71, CRO, NIG, goal, cro, 10 +2018, 6, 16, 19 89, CRO, NIG, yellow, cro, 11 +2018, 6, 16, 19 90, CRO, NIG, ft, 0, 0 + +2018, 6, 17, 12 0, CRC, SER, ko, 0, 0 +2018, 6, 17, 12 45, CRC, SER, ht, 0, 0 +2018, 6, 17, 12 90, CRC, SER, ft, 0, 0 + +2018, 6, 17, 15 0, GER, MEX, ko, 0, 0 +2018, 6, 17, 15 45, GER, MEX, ht, 0, 0 +2018, 6, 17, 15 90, GER, MEX, ft, 0, 0 + +2018, 6, 17, 18 0, BRA, SWI, ko, 0, 0 +2018, 6, 17, 18 45, BRA, SWI, ht, 0, 0 +2018, 6, 17, 18 90, BRA, SWI, ft, 0, 0 + +2018, 6, 18, 12 0, SWE, SKO, ko, 0, 0 +2018, 6, 18, 12 45, SWE, SKO, ht, 0, 0 +2018, 6, 18, 12 90, SWE, SKO, ft, 0, 0 + +2018, 6, 18, 15 0, BEL, PAN, ko, 0, 0 +2018, 6, 18, 15 45, BEL, PAN, ht, 0, 0 +2018, 6, 18, 15 90, BEL, PAN, ft, 0, 0 + +2018, 6, 18, 18 0, TUN, ENG, ko, 0, 0 +2018, 6, 18, 18 45, TUN, ENG, ht, 0, 0 +2018, 6, 18, 18 90, TUN, ENG, ft, 0, 0 + +2018, 6, 19, 12 0, COL, JAP, ko, 0, 0 +2018, 6, 19, 12 45, COL, JAP, ht, 0, 0 +2018, 6, 19, 12 90, COL, JAP, ft, 0, 0 + +2018, 6, 19, 15 0, POL, SEN, ko, 0, 0 +2018, 6, 19, 15 45, POL, SEN, ht, 0, 0 +2018, 6, 19, 15 90, POL, SEN, ft, 0, 0 + +2018, 6, 19, 18 0, RUS, EGY, ko, 0, 0 +2018, 6, 19, 18 45, RUS, EGY, ht, 0, 0 +2018, 6, 19, 18 90, RUS, EGY, ft, 0, 0 + +2018, 6, 20, 12 0, POR, MOR, ko, 0, 0 +2018, 6, 20, 12 45, POR, MOR, ht, 0, 0 +2018, 6, 20, 12 90, POR, MOR, ft, 0, 0 + +2018, 6, 20, 15 0, URG, SAU, ko, 0, 0 +2018, 6, 20, 15 45, URG, SAU, ht, 0, 0 +2018, 6, 20, 15 90, URG, SAU, ft, 0, 0 + +2018, 6, 20, 18 0, IRA, SPA, ko, 0, 0 +2018, 6, 20, 18 45, IRA, SPA, ht, 0, 0 +2018, 6, 20, 18 90, IRA, SPA, ft, 0, 0 + +2018, 6, 21, 12 0, DEN, AUS, ko, 0, 0 +2018, 6, 21, 12 45, DEN, AUS, ht, 0, 0 +2018, 6, 21, 12 90, DEN, AUS, ft, 0, 0 + +2018, 6, 21, 15 0, FRA, PER, ko, 0, 0 +2018, 6, 21, 15 45, FRA, PER, ht, 0, 0 +2018, 6, 21, 15 90, FRA, PER, ft, 0, 0 + +2018, 6, 21, 18 0, ARG, CRO, ko, 0, 0 +2018, 6, 21, 18 45, ARG, CRO, ht, 0, 0 +2018, 6, 21, 18 90, ARG, CRO, ft, 0, 0 + +2018, 6, 22, 12 0, BRA, CRC, ko, 0, 0 +2018, 6, 22, 12 45, BRA, CRC, ht, 0, 0 +2018, 6, 22, 12 90, BRA, CRC, ft, 0, 0 + +2018, 6, 22, 15 0, NIG, ICE, ko, 0, 0 +2018, 6, 22, 15 45, NIG, ICE, ht, 0, 0 +2018, 6, 22, 15 90, NIG, ICE, ft, 0, 0 + +2018, 6, 22, 18 0, SER, SWI, ko, 0, 0 +2018, 6, 22, 18 45, SER, SWI, ht, 0, 0 +2018, 6, 22, 18 90, SER, SWI, ft, 0, 0 + +2018, 6, 23, 12 0, BEL, TUN, ko, 0, 0 +2018, 6, 23, 12 45, BEL, TUN, ht, 0, 0 +2018, 6, 23, 12 90, BEL, TUN, ft, 0, 0 + +2018, 6, 23, 15 0, SKO, MEX, ko, 0, 0 +2018, 6, 23, 15 45, SKO, MEX, ht, 0, 0 +2018, 6, 23, 15 90, SKO, MEX, ft, 0, 0 + +2018, 6, 23, 18 0, GER, SWE, ko, 0, 0 +2018, 6, 23, 18 45, GER, SWE, ht, 0, 0 +2018, 6, 23, 18 90, GER, SWE, ft, 0, 0 + +2018, 6, 24, 12 0, ENG, PAN, ko, 0, 0 +2018, 6, 24, 12 45, ENG, PAN, ht, 0, 0 +2018, 6, 24, 12 90, ENG, PAN, ft, 0, 0 + +2018, 6, 24, 15 0, JAP, SEN, ko, 0, 0 +2018, 6, 24, 15 45, JAP, SEN, ht, 0, 0 +2018, 6, 24, 15 90, JAP, SEN, ft, 0, 0 + +2018, 6, 24, 18 0, POL, COL, ko, 0, 0 +2018, 6, 24, 18 45, POL, COL, ht, 0, 0 +2018, 6, 24, 18 90, POL, COL, ft, 0, 0 + +2018, 6, 25, 14 0, URG, RUS, ko, 0, 0 +2018, 6, 25, 14 45, URG, RUS, ht, 0, 0 +2018, 6, 25, 14 90, URG, RUS, ft, 0, 0 + +2018, 6, 25, 14 0, SAU, EGY, ko, 0, 0 +2018, 6, 25, 14 45, SAU, EGY, ht, 0, 0 +2018, 6, 25, 14 90, SAU, EGY, ft, 0, 0 + +2018, 6, 25, 18 0, IRA, POR, ko, 0, 0 +2018, 6, 25, 18 45, IRA, POR, ht, 0, 0 +2018, 6, 25, 18 90, IRA, POR, ft, 0, 0 + +2018, 6, 25, 18 0, SPA, MOR, ko, 0, 0 +2018, 6, 25, 18 45, SPA, MOR, ht, 0, 0 +2018, 6, 25, 18 90, SPA, MOR, ft, 0, 0 + +2018, 6, 26, 14 0, DEN, FRA, ko, 0, 0 +2018, 6, 26, 14 45, DEN, FRA, ht, 0, 0 +2018, 6, 26, 14 90, DEN, FRA, ft, 0, 0 + +2018, 6, 26, 14 0, AUS, PER, ko, 0, 0 +2018, 6, 26, 14 45, AUS, PER, ht, 0, 0 +2018, 6, 26, 14 90, AUS, PER, ft, 0, 0 + +2018, 6, 26, 18 0, NIG, ARG, ko, 0, 0 +2018, 6, 26, 18 45, NIG, ARG, ht, 0, 0 +2018, 6, 26, 18 90, NIG, ARG, ft, 0, 0 + +2018, 6, 26, 18 0, ICE, CRO, ko, 0, 0 +2018, 6, 26, 18 45, ICE, CRO, ht, 0, 0 +2018, 6, 26, 18 90, ICE, CRO, ft, 0, 0 + +2018, 6, 27, 14 0, SKO, GER, ko, 0, 0 +2018, 6, 27, 14 45, SKO, GER, ht, 0, 0 +2018, 6, 27, 14 90, SKO, GER, ft, 0, 0 + +2018, 6, 27, 14 0, MEX, SWE, ko, 0, 0 +2018, 6, 27, 14 45, MEX, SWE, ht, 0, 0 +2018, 6, 27, 14 90, MEX, SWE, ft, 0, 0 + +2018, 6, 27, 18 0, SER, BRA, ko, 0, 0 +2018, 6, 27, 18 45, SER, BRA, ht, 0, 0 +2018, 6, 27, 18 90, SER, BRA, ft, 0, 0 + +2018, 6, 27, 18 0, SWI, CRC, ko, 0, 0 +2018, 6, 27, 18 45, SWI, CRC, ht, 0, 0 +2018, 6, 27, 18 90, SWI, CRC, ft, 0, 0 + +2018, 6, 28, 14 0, JAP, POL, ko, 0, 0 +2018, 6, 28, 14 45, JAP, POL, ht, 0, 0 +2018, 6, 28, 14 90, JAP, POL, ft, 0, 0 + +2018, 6, 28, 14 0, SEN, COL, ko, 0, 0 +2018, 6, 28, 14 45, SEN, COL, ht, 0, 0 +2018, 6, 28, 14 90, SEN, COL, ft, 0, 0 + +2018, 6, 28, 18 0, ENG, BEL, ko, 0, 0 +2018, 6, 28, 18 45, ENG, BEL, ht, 0, 0 +2018, 6, 28, 18 90, ENG, BEL, ft, 0, 0 + +2018, 6, 28, 18 0, PAN, TUN, ko, 0, 0 +2018, 6, 28, 18 45, PAN, TUN, ht, 0, 0 +2018, 6, 28, 18 90, PAN, TUN, ft, 0, 0 diff --git a/karmapi/wc.py b/karmapi/wc.py index 630e261..5032cd8 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -883,6 +883,16 @@ async def run(self): print('load games') await self.reset() + if self.dump: + print(self.dump, dump) + for game in self.generate_games(): + #print(game) + dump(game, self.dump) + + self.dump.close() + sys.exit(0) + + print('loop forever?') #while not self.games.empty(): while True: @@ -1122,7 +1132,7 @@ class NorthPole(Place): Game(por, spa, datetime(2018, 6, 15, 18, 0), where=places['sochi'], - ascore=None, bscore=None), + ascore=3, bscore=3), Game(por, mor, datetime(2018, 6, 20, 12, 0), @@ -1145,11 +1155,11 @@ class NorthPole(Place): games = [ Game(fra, aus, datetime(2018, 6, 16, 10, 0), where=places['kazan'], - ascore=None, bscore=None), + ascore=2, bscore=1), Game(per, den, datetime(2018, 6, 16, 14, 0), where=places['saransk'], - ascore=None, bscore=None), + ascore=0, bscore=1), Game(den, aus, datetime(2018, 6, 21, 12, 0), @@ -1173,11 +1183,11 @@ class NorthPole(Place): games = [ Game(arg, ice, datetime(2018, 6, 16, 13, 0), where=places['spartak'], - ascore=None, bscore=None), + ascore=1, bscore=1), Game(cro, nig, datetime(2018, 6, 16, 19, 0), where=places['kaliningrad'], - ascore=2, bscore=2), + ascore=2, bscore=0), Game(arg, cro, datetime(2018, 6, 21, 18, 0), @@ -1206,7 +1216,7 @@ class NorthPole(Place): Game(bra, swi, datetime(2018, 6, 17, 18, 0), where=places['rostovondon'], - ascore=3, bscore=3), + ascore=None, bscore=None), Game(bra, crc, datetime(2018, 6, 22, 12, 0), @@ -1256,11 +1266,11 @@ class NorthPole(Place): games = [ Game(bel, pan, datetime(2018, 6, 18, 15, 0), where=places['sochi'], - ascore=3, bscore=1), + ascore=None, bscore=None), Game(tun, eng, datetime(2018, 6, 18, 18, 0), where=places['volgograd'], - ascore=0, bscore=0), + ascore=None, bscore=None), Game(bel, tun, datetime(2018, 6, 23, 12, 0), @@ -1284,11 +1294,11 @@ class NorthPole(Place): games = [ Game(col, jap, datetime(2018, 6, 19, 12, 0), where=places['saransk'], - ascore=2, bscore=1), + ascore=None, bscore=None), Game(pol, sen, datetime(2018, 6, 19, 15, 0), where=places['spartak'], - ascore=3, bscore=2), + ascore=None, bscore=None), Game(jap, sen, datetime(2018, 6, 24, 15, 0), @@ -1364,12 +1374,14 @@ class NorthPole(Place): # add a PI Gui? class MexicanWaves(pigfarm.Yard): - def __init__(self, parent, jsf=None, venues=None, gallery='.'): + def __init__(self, parent, jsf=None, venues=None, gallery='.', + dump=None, events=None): """ Initialise the thing """ super().__init__(parent) self.jsf = jsf + self.jsf.dump = dump self.messages = [] @@ -1519,7 +1531,7 @@ def draw(self): import time self.beanstalk.create_time = time.time() - print(self.beanstalk.xx, self.beanstalk.yy) + #print(self.beanstalk.xx, self.beanstalk.yy) self.beanstalk.draw(self.canvas, self.width, self.height, 'red') @@ -1727,11 +1739,11 @@ async def run(self): image = self.find_image('1991') if image: - print(image) + #print(image) image = self.load_image(image) - print(image.size) + #print(image.size) image = image.resize((int(self.height), int(self.width))) - print(image.size, self.width, self.height) + #print(image.size, self.width, self.height) self.beanstalk.image = image self.draw() @@ -1740,13 +1752,27 @@ async def run(self): self.jsf.now = self.when - print('sleeping', self.sleep) + #print('sleeping', self.sleep) await curio.sleep(0) +def dump(game, out): + + print('dumping') + when = game.when + print(when.year, when.month, when.day, when.hour, sep=', ', end=' ', file=out) + print(0, game.a, game.b, 'ko', 0, 0, sep=', ', file=out) + + print(when.year, when.month, when.day, when.hour, sep=', ', end=' ', file=out) + print(45, game.a, game.b, 'ht', 0, 0, sep=', ', file=out) + + print(when.year, when.month, when.day, when.hour, sep=', ', end=' ', file=out) + print(90, game.a, game.b, 'ft', 0, 0, sep=', ', file=out) parser = argparse.ArgumentParser() parser.add_argument('--nopig', action='store_true') parser.add_argument('--gallery') +parser.add_argument('--dump') +parser.add_argument('--events') args = parser.parse_args() if args.nopig: @@ -1755,9 +1781,19 @@ async def run(self): farm = pigfarm.PigFarm() from karmapi.mclock2 import GuidoClock + +xdump = args.dump +if xdump: + xdump = open(args.dump, 'w') + +if args.events: + args.events = open(args.events) + farm.add(GuidoClock) -farm.add(MexicanWaves, dict(jsf=jsf, venues=places, gallery=args.gallery)) +farm.add(MexicanWaves, dict(jsf=jsf, venues=places, gallery=args.gallery, + events=args.events, + dump=xdump)) # add a random wc time warper? curio.run(farm.run(), with_monitor=True) From ba7b128e8b93c028d4ce8a8eef46cee5873b743c Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 17 Jun 2018 19:57:16 -0400 Subject: [PATCH 332/642] latest wc stats --- karmapi/wc.csv | 56 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 20 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index 4c44036..73eefd3 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -59,26 +59,42 @@ year, month, day, hour, minute, ateam, bteam, what, team, player 2018, 6, 16, 14, 93, PER, DEN, yellow, den, 20 2018, 6, 16, 14, 94, PER, DEN, ft, 0, 1 -2018, 6, 16, 19 0, CRO, NIG, ko, 0, 0 -2018, 6, 16, 19 30, CRO, NIG, yellow, cro, 7 -2018, 6, 16, 19 32, CRO, NIG, goal, cro, 108 -2018, 6, 16, 19 45, CRO, NIG, ht, 0, 0 -2018, 6, 16, 19 70, CRO, NIG, yellow, nig, 5 -2018, 6, 16, 19 71, CRO, NIG, goal, cro, 10 -2018, 6, 16, 19 89, CRO, NIG, yellow, cro, 11 -2018, 6, 16, 19 90, CRO, NIG, ft, 0, 0 - -2018, 6, 17, 12 0, CRC, SER, ko, 0, 0 -2018, 6, 17, 12 45, CRC, SER, ht, 0, 0 -2018, 6, 17, 12 90, CRC, SER, ft, 0, 0 - -2018, 6, 17, 15 0, GER, MEX, ko, 0, 0 -2018, 6, 17, 15 45, GER, MEX, ht, 0, 0 -2018, 6, 17, 15 90, GER, MEX, ft, 0, 0 - -2018, 6, 17, 18 0, BRA, SWI, ko, 0, 0 -2018, 6, 17, 18 45, BRA, SWI, ht, 0, 0 -2018, 6, 17, 18 90, BRA, SWI, ft, 0, 0 +2018, 6, 16, 19, 0, CRO, NIG, ko, 0, 0 +2018, 6, 16, 19, 30, CRO, NIG, yellow, cro, 7 +2018, 6, 16, 19, 32, CRO, NIG, goal, cro, 108 +2018, 6, 16, 19, 45, CRO, NIG, ht, 0, 0 +2018, 6, 16, 19, 70, CRO, NIG, yellow, nig, 5 +2018, 6, 16, 19, 71, CRO, NIG, goal, cro, 10 +2018, 6, 16, 19, 89, CRO, NIG, yellow, cro, 11 +2018, 6, 16, 19, 90, CRO, NIG, ft, 2, 0 + +2018, 6, 17, 12, 0, CRC, SER, ko, 0, 0 +2018, 6, 17, 12, 15, CRC, SER, yellow, crc, 15 +2018, 6, 17, 12, 45, CRC, SER, ht, 0, 0 +2018, 6, 17, 12, 56, CRC, SER, yellow, crc, 20 +2018, 6, 17, 12, 0, CRC, SER, goal, ser, 11 +2018, 6, 17, 12, 59, CRC, SER, yellow, ser, 6 +2018, 6, 17, 12, 98, CRC, SER, yellow, ser, 8 +2018, 6, 17, 12, 98, CRC, SER, ft, 0, 1 + +2018, 6, 17, 15, 0, GER, MEX, ko, 0, 0 +2018, 6, 17, 15, 35, GER, MEX, goal, mex, 22 +2018, 6, 17, 15, 40, GER, MEX, yellow, mex, 15 +2018, 6, 17, 15, 45, GER, MEX, ht, 0, 1 +2018, 6, 17, 15, 83, GER, MEX, yellow, ger, 13 +2018, 6, 17, 83, 84, GER, MEX, yellow, ger, 5 +2018, 6, 17, 15, 90, GER, MEX, yellow, mex, 16 +2018, 6, 17, 15, 93, GER, MEX, ft, 0, 1 + +2018, 6, 17, 18, 0, BRA, SWI, ko, 0, 0 +2018, 6, 17, 18, 20, BRA, SWI, goal, bra, 11 +2018, 6, 17, 18, 31, BRA, SWI, yellow, swi, 2 +2018, 6, 17, 18, 45, BRA, SWI, ht, 1, 0 +2018, 6, 17, 18, 47, BRA, SWI, yellow, swi, 5 +2018, 6, 17, 18, 49, BRA, SWI, goal, swi, 14 +2018, 6, 17, 18, 65, BRA, SWI, yellow, swi, 22 +2018, 6, 17, 18, 68, BRA, SWI, yellow, swi, 11 +2018, 6, 17, 18 90, BRA, SWI, ft, 1, 1 2018, 6, 18, 12 0, SWE, SKO, ko, 0, 0 2018, 6, 18, 12 45, SWE, SKO, ht, 0, 0 From 709d39e84981d1e61f7b60dd80f3c577cb2559a0 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 18 Jun 2018 13:01:07 -0400 Subject: [PATCH 333/642] more world cup --- karmapi/wc.csv | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index 73eefd3..f93afc7 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -97,12 +97,27 @@ year, month, day, hour, minute, ateam, bteam, what, team, player 2018, 6, 17, 18 90, BRA, SWI, ft, 1, 1 2018, 6, 18, 12 0, SWE, SKO, ko, 0, 0 +2018, 6, 18, 12 12, SWE, SKO, yellow, sko, 9 2018, 6, 18, 12 45, SWE, SKO, ht, 0, 0 -2018, 6, 18, 12 90, SWE, SKO, ft, 0, 0 +2018, 6, 18, 12 55, SWE, SKO, yellow, sko, 11 +2018, 6, 18, 12 61, SWE, SKO, yellow, swe, 17 +2018, 6, 18, 12 65, SWE, SKO, goal, swe, 17 +2018, 6, 18, 12 90, SWE, SKO, ft, 1, 0 2018, 6, 18, 15 0, BEL, PAN, ko, 0, 0 +2018, 6, 18, 15 14, BEL, PAN, yellow, bel, 15 +2018, 6, 18, 15 18, BEL, PAN, yellow, pan, 15 2018, 6, 18, 15 45, BEL, PAN, ht, 0, 0 -2018, 6, 18, 15 90, BEL, PAN, ft, 0, 0 +2018, 6, 18, 15 47, BEL, PAN, goal, bel, 14 +2018, 6, 18, 15 49, BEL, PAN, yellow, pan, 11 +2018, 6, 18, 15 51, BEL, PAN, yellow, pan, 2 +2018, 6, 18, 15 57, BEL, PAN, yellow, pan, 20 +2018, 6, 18, 15 59, BEL, PAN, yellow, bel, 5 +2018, 6, 18, 15 51, BEL, PAN, yellow, pan, 2 +2018, 6, 18, 15 69, BEL, PAN, goal, bel, 9 +2018, 6, 18, 15 75, BEL, PAN, goal, bel, 9 +2018, 6, 18, 15 88, BEL, PAN, yellow, bel, 7 +2018, 6, 18, 15 90, BEL, PAN, ft, 3, 0 2018, 6, 18, 18 0, TUN, ENG, ko, 0, 0 2018, 6, 18, 18 45, TUN, ENG, ht, 0, 0 From fff6b66dd23d126afdffd89d136fb1b3a7c6d517 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 18 Jun 2018 15:53:47 -0400 Subject: [PATCH 334/642] england win at wc --- karmapi/wc.csv | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index f93afc7..4a31c3e 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -120,8 +120,12 @@ year, month, day, hour, minute, ateam, bteam, what, team, player 2018, 6, 18, 15 90, BEL, PAN, ft, 3, 0 2018, 6, 18, 18 0, TUN, ENG, ko, 0, 0 -2018, 6, 18, 18 45, TUN, ENG, ht, 0, 0 -2018, 6, 18, 18 90, TUN, ENG, ft, 0, 0 +2018, 6, 18, 18 11, TUN, ENG, goal, eng, 9 +2018, 6, 18, 18 33, TUN, ENG, yellow, eng, 2 +2018, 6, 18, 18 35, TUN, ENG, goal, tun, 13 +2018, 6, 18, 18 45, TUN, ENG, ht, 1, 1 +2018, 6, 18, 18 91, TUN, ENG, goal, eng, 9 +2018, 6, 18, 18 95, TUN, ENG, ft, 1, 2 2018, 6, 19, 12 0, COL, JAP, ko, 0, 0 2018, 6, 19, 12 45, COL, JAP, ht, 0, 0 From 0a27ed99dd04d78cf8b3c3336dd544bfcf46a3e4 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 18 Jun 2018 19:31:12 -0400 Subject: [PATCH 335/642] who knew? python has a calendar module for day names --- karmapi/wc.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/karmapi/wc.py b/karmapi/wc.py index 5032cd8..d207eb8 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -115,6 +115,7 @@ import argparse from collections import Counter, defaultdict from datetime import datetime, timedelta +import calendar import sys import curio @@ -331,9 +332,14 @@ def __str__(self): str(self.label) + ' ' + str(self.a.name) + ' v ' + str(self.b.name) + ' ' + + self.day_name() + ' ' + str(self.when) + ' ' + str(self.where)) + def day_name(self): + + return calendar.day_name[self.when.weekday()] + def __eq__(self, other): return self.number == other.number @@ -1402,6 +1408,7 @@ def __init__(self, parent, jsf=None, venues=None, gallery='.', self.add_event_map('t', self.toggle_show_teams) self.add_event_map('j', self.previous_group) self.add_event_map('k', self.next_group) + #self.add_event_map(' ', self.toggle_pause) self.game_view = False self.team_view = False From 5cd3d529047d4824bb913deaed09dc9d6f45b652 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 19 Jun 2018 14:12:39 -0400 Subject: [PATCH 336/642] carpet fix wc data and event parsing --- karmapi/carpet.py | 2 +- karmapi/wc.csv | 97 +++++++++++++++++++++++++++-------------------- karmapi/wc.py | 10 +++++ 3 files changed, 66 insertions(+), 43 deletions(-) diff --git a/karmapi/carpet.py b/karmapi/carpet.py index dc5895e..560f81e 100644 --- a/karmapi/carpet.py +++ b/karmapi/carpet.py @@ -8,7 +8,7 @@ class MagicMosaic(pigfarm.Space): - def __init__(self, parent, carpets=[]) + def __init__(self, parent, carpets=[]): super().__init__(parent) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index 4a31c3e..5308dfa 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -96,48 +96,61 @@ year, month, day, hour, minute, ateam, bteam, what, team, player 2018, 6, 17, 18, 68, BRA, SWI, yellow, swi, 11 2018, 6, 17, 18 90, BRA, SWI, ft, 1, 1 -2018, 6, 18, 12 0, SWE, SKO, ko, 0, 0 -2018, 6, 18, 12 12, SWE, SKO, yellow, sko, 9 -2018, 6, 18, 12 45, SWE, SKO, ht, 0, 0 -2018, 6, 18, 12 55, SWE, SKO, yellow, sko, 11 -2018, 6, 18, 12 61, SWE, SKO, yellow, swe, 17 -2018, 6, 18, 12 65, SWE, SKO, goal, swe, 17 -2018, 6, 18, 12 90, SWE, SKO, ft, 1, 0 - -2018, 6, 18, 15 0, BEL, PAN, ko, 0, 0 -2018, 6, 18, 15 14, BEL, PAN, yellow, bel, 15 -2018, 6, 18, 15 18, BEL, PAN, yellow, pan, 15 -2018, 6, 18, 15 45, BEL, PAN, ht, 0, 0 -2018, 6, 18, 15 47, BEL, PAN, goal, bel, 14 -2018, 6, 18, 15 49, BEL, PAN, yellow, pan, 11 -2018, 6, 18, 15 51, BEL, PAN, yellow, pan, 2 -2018, 6, 18, 15 57, BEL, PAN, yellow, pan, 20 -2018, 6, 18, 15 59, BEL, PAN, yellow, bel, 5 -2018, 6, 18, 15 51, BEL, PAN, yellow, pan, 2 -2018, 6, 18, 15 69, BEL, PAN, goal, bel, 9 -2018, 6, 18, 15 75, BEL, PAN, goal, bel, 9 -2018, 6, 18, 15 88, BEL, PAN, yellow, bel, 7 -2018, 6, 18, 15 90, BEL, PAN, ft, 3, 0 - -2018, 6, 18, 18 0, TUN, ENG, ko, 0, 0 -2018, 6, 18, 18 11, TUN, ENG, goal, eng, 9 -2018, 6, 18, 18 33, TUN, ENG, yellow, eng, 2 -2018, 6, 18, 18 35, TUN, ENG, goal, tun, 13 -2018, 6, 18, 18 45, TUN, ENG, ht, 1, 1 -2018, 6, 18, 18 91, TUN, ENG, goal, eng, 9 -2018, 6, 18, 18 95, TUN, ENG, ft, 1, 2 - -2018, 6, 19, 12 0, COL, JAP, ko, 0, 0 -2018, 6, 19, 12 45, COL, JAP, ht, 0, 0 -2018, 6, 19, 12 90, COL, JAP, ft, 0, 0 - -2018, 6, 19, 15 0, POL, SEN, ko, 0, 0 -2018, 6, 19, 15 45, POL, SEN, ht, 0, 0 -2018, 6, 19, 15 90, POL, SEN, ft, 0, 0 - -2018, 6, 19, 18 0, RUS, EGY, ko, 0, 0 -2018, 6, 19, 18 45, RUS, EGY, ht, 0, 0 -2018, 6, 19, 18 90, RUS, EGY, ft, 0, 0 +2018, 6, 18, 12, 0, SWE, SKO, ko, 0, 0 +2018, 6, 18, 12, 12, SWE, SKO, yellow, sko, 9 +2018, 6, 18, 12, 45, SWE, SKO, ht, 0, 0 +2018, 6, 18, 12, 55, SWE, SKO, yellow, sko, 11 +2018, 6, 18, 12, 61, SWE, SKO, yellow, swe, 17 +2018, 6, 18, 12, 65, SWE, SKO, goal, swe, 17 +2018, 6, 18, 12, 90, SWE, SKO, ft, 1, 0 + +2018, 6, 18, 15, 0, BEL, PAN, ko, 0, 0 +2018, 6, 18, 15, 14, BEL, PAN, yellow, bel, 15 +2018, 6, 18, 15, 18, BEL, PAN, yellow, pan, 15 +2018, 6, 18, 15, 45, BEL, PAN, ht, 0, 0 +2018, 6, 18, 15, 47, BEL, PAN, goal, bel, 14 +2018, 6, 18, 15, 49, BEL, PAN, yellow, pan, 11 +2018, 6, 18, 15, 51, BEL, PAN, yellow, pan, 2 +2018, 6, 18, 15, 57, BEL, PAN, yellow, pan, 20 +2018, 6, 18, 15, 59, BEL, PAN, yellow, bel, 5 +2018, 6, 18, 15, 51, BEL, PAN, yellow, pan, 2 +2018, 6, 18, 15, 69, BEL, PAN, goal, bel, 9 +2018, 6, 18, 15, 75, BEL, PAN, goal, bel, 9 +2018, 6, 18, 15, 88, BEL, PAN, yellow, bel, 7 +2018, 6, 18, 15, 90, BEL, PAN, ft, 3, 0 + +2018, 6, 18, 18, 0, TUN, ENG, ko, 0, 0 +2018, 6, 18, 18, 11, TUN, ENG, goal, eng, 9 +2018, 6, 18, 18, 33, TUN, ENG, yellow, eng, 2 +2018, 6, 18, 18, 35, TUN, ENG, goal, tun, 13 +2018, 6, 18, 18, 45, TUN, ENG, ht, 1, 1 +2018, 6, 18, 18, 91, TUN, ENG, goal, eng, 9 +2018, 6, 18, 18, 95, TUN, ENG, ft, 1, 2 + +2018, 6, 19, 12, 0, COL, JAP, ko, 0, 0 +2018, 6, 19, 12, 3, COL, JAP, red, urg, 6 +2018, 6, 19, 12, 6, COL, JAP, goal, jap, 10 +2018, 6, 19, 12, 39, COL, JAP, goal, col, 20 +2018, 6, 19, 12, 45, COL, JAP, ht, 1, 1 +2018, 6, 19, 12, 64, COL, JAP, yellow, col, 5 +2018, 6, 19, 12, 73, COL, JAP, goal, jap, 15 +2018, 6, 19, 12, 86, COL, JAP, yellow, col, 10 +2018, 6, 19, 12, 93, COL, JAP, yellow, jap, 1 +2018, 6, 19, 12, 94, COL, JAP, ft, 1, 2 + +2018, 6, 19, 15, 0, POL, SEN, ko, 0, 0 +2018, 6, 19, 15, 12, POL, SEN, yellow, pol, 10 +2018, 6, 19, 15, 37, POL, SEN, goal, sen, 104 +2018, 6, 19, 15, 45, POL, SEN, ht, 0, 1 +2018, 6, 19, 15, 60, POL, SEN, goal, sen, 19 +2018, 6, 19, 15, 72, POL, SEN, yellow, sen, 5 +2018, 6, 19, 49, 0, POL, SEN, yellow, sen, 6 +2018, 6, 19, 15, 86, POL, SEN, goal, pol, 10 +2018, 6, 19, 15, 95, POL, SEN, ft, 0, 0 + +2018, 6, 19, 18, 0, RUS, EGY, ko, 0, 0 +2018, 6, 19, 18, 45, RUS, EGY, ht, 0, 0 +2018, 6, 19, 18, 90, RUS, EGY, ft, 0, 0 2018, 6, 20, 12 0, POR, MOR, ko, 0, 0 2018, 6, 20, 12 45, POR, MOR, ht, 0, 0 diff --git a/karmapi/wc.py b/karmapi/wc.py index d207eb8..f3d4da5 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -113,6 +113,7 @@ from random import random, randint import argparse +import csv from collections import Counter, defaultdict from datetime import datetime, timedelta import calendar @@ -1775,6 +1776,12 @@ def dump(game, out): print(when.year, when.month, when.day, when.hour, sep=', ', end=' ', file=out) print(90, game.a, game.b, 'ft', 0, 0, sep=', ', file=out) +def parse_events(events): + + for row in csv.reader(events): + print(row) + + parser = argparse.ArgumentParser() parser.add_argument('--nopig', action='store_true') parser.add_argument('--gallery') @@ -1795,6 +1802,9 @@ def dump(game, out): if args.events: args.events = open(args.events) + + parse_events(args.events) + sys.exit() farm.add(GuidoClock) From 677bd0dddee1e6011058fea12184e3c566733d5a Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 19 Jun 2018 14:37:07 -0400 Subject: [PATCH 337/642] shuffling event csv format --- karmapi/wc.csv | 126 ++----------------------------------------------- karmapi/wc.py | 18 ++++++- 2 files changed, 19 insertions(+), 125 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index 5308dfa..b3e1e42 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -149,129 +149,9 @@ year, month, day, hour, minute, ateam, bteam, what, team, player 2018, 6, 19, 15, 95, POL, SEN, ft, 0, 0 2018, 6, 19, 18, 0, RUS, EGY, ko, 0, 0 +2018, 6, 19, , 0, RUS, EGY, +2018, 6, 19, , 0, RUS, EGY, +2018, 6, 19, , 0, RUS, EGY, 2018, 6, 19, 18, 45, RUS, EGY, ht, 0, 0 2018, 6, 19, 18, 90, RUS, EGY, ft, 0, 0 -2018, 6, 20, 12 0, POR, MOR, ko, 0, 0 -2018, 6, 20, 12 45, POR, MOR, ht, 0, 0 -2018, 6, 20, 12 90, POR, MOR, ft, 0, 0 - -2018, 6, 20, 15 0, URG, SAU, ko, 0, 0 -2018, 6, 20, 15 45, URG, SAU, ht, 0, 0 -2018, 6, 20, 15 90, URG, SAU, ft, 0, 0 - -2018, 6, 20, 18 0, IRA, SPA, ko, 0, 0 -2018, 6, 20, 18 45, IRA, SPA, ht, 0, 0 -2018, 6, 20, 18 90, IRA, SPA, ft, 0, 0 - -2018, 6, 21, 12 0, DEN, AUS, ko, 0, 0 -2018, 6, 21, 12 45, DEN, AUS, ht, 0, 0 -2018, 6, 21, 12 90, DEN, AUS, ft, 0, 0 - -2018, 6, 21, 15 0, FRA, PER, ko, 0, 0 -2018, 6, 21, 15 45, FRA, PER, ht, 0, 0 -2018, 6, 21, 15 90, FRA, PER, ft, 0, 0 - -2018, 6, 21, 18 0, ARG, CRO, ko, 0, 0 -2018, 6, 21, 18 45, ARG, CRO, ht, 0, 0 -2018, 6, 21, 18 90, ARG, CRO, ft, 0, 0 - -2018, 6, 22, 12 0, BRA, CRC, ko, 0, 0 -2018, 6, 22, 12 45, BRA, CRC, ht, 0, 0 -2018, 6, 22, 12 90, BRA, CRC, ft, 0, 0 - -2018, 6, 22, 15 0, NIG, ICE, ko, 0, 0 -2018, 6, 22, 15 45, NIG, ICE, ht, 0, 0 -2018, 6, 22, 15 90, NIG, ICE, ft, 0, 0 - -2018, 6, 22, 18 0, SER, SWI, ko, 0, 0 -2018, 6, 22, 18 45, SER, SWI, ht, 0, 0 -2018, 6, 22, 18 90, SER, SWI, ft, 0, 0 - -2018, 6, 23, 12 0, BEL, TUN, ko, 0, 0 -2018, 6, 23, 12 45, BEL, TUN, ht, 0, 0 -2018, 6, 23, 12 90, BEL, TUN, ft, 0, 0 - -2018, 6, 23, 15 0, SKO, MEX, ko, 0, 0 -2018, 6, 23, 15 45, SKO, MEX, ht, 0, 0 -2018, 6, 23, 15 90, SKO, MEX, ft, 0, 0 - -2018, 6, 23, 18 0, GER, SWE, ko, 0, 0 -2018, 6, 23, 18 45, GER, SWE, ht, 0, 0 -2018, 6, 23, 18 90, GER, SWE, ft, 0, 0 - -2018, 6, 24, 12 0, ENG, PAN, ko, 0, 0 -2018, 6, 24, 12 45, ENG, PAN, ht, 0, 0 -2018, 6, 24, 12 90, ENG, PAN, ft, 0, 0 - -2018, 6, 24, 15 0, JAP, SEN, ko, 0, 0 -2018, 6, 24, 15 45, JAP, SEN, ht, 0, 0 -2018, 6, 24, 15 90, JAP, SEN, ft, 0, 0 - -2018, 6, 24, 18 0, POL, COL, ko, 0, 0 -2018, 6, 24, 18 45, POL, COL, ht, 0, 0 -2018, 6, 24, 18 90, POL, COL, ft, 0, 0 - -2018, 6, 25, 14 0, URG, RUS, ko, 0, 0 -2018, 6, 25, 14 45, URG, RUS, ht, 0, 0 -2018, 6, 25, 14 90, URG, RUS, ft, 0, 0 - -2018, 6, 25, 14 0, SAU, EGY, ko, 0, 0 -2018, 6, 25, 14 45, SAU, EGY, ht, 0, 0 -2018, 6, 25, 14 90, SAU, EGY, ft, 0, 0 - -2018, 6, 25, 18 0, IRA, POR, ko, 0, 0 -2018, 6, 25, 18 45, IRA, POR, ht, 0, 0 -2018, 6, 25, 18 90, IRA, POR, ft, 0, 0 - -2018, 6, 25, 18 0, SPA, MOR, ko, 0, 0 -2018, 6, 25, 18 45, SPA, MOR, ht, 0, 0 -2018, 6, 25, 18 90, SPA, MOR, ft, 0, 0 - -2018, 6, 26, 14 0, DEN, FRA, ko, 0, 0 -2018, 6, 26, 14 45, DEN, FRA, ht, 0, 0 -2018, 6, 26, 14 90, DEN, FRA, ft, 0, 0 - -2018, 6, 26, 14 0, AUS, PER, ko, 0, 0 -2018, 6, 26, 14 45, AUS, PER, ht, 0, 0 -2018, 6, 26, 14 90, AUS, PER, ft, 0, 0 - -2018, 6, 26, 18 0, NIG, ARG, ko, 0, 0 -2018, 6, 26, 18 45, NIG, ARG, ht, 0, 0 -2018, 6, 26, 18 90, NIG, ARG, ft, 0, 0 - -2018, 6, 26, 18 0, ICE, CRO, ko, 0, 0 -2018, 6, 26, 18 45, ICE, CRO, ht, 0, 0 -2018, 6, 26, 18 90, ICE, CRO, ft, 0, 0 - -2018, 6, 27, 14 0, SKO, GER, ko, 0, 0 -2018, 6, 27, 14 45, SKO, GER, ht, 0, 0 -2018, 6, 27, 14 90, SKO, GER, ft, 0, 0 - -2018, 6, 27, 14 0, MEX, SWE, ko, 0, 0 -2018, 6, 27, 14 45, MEX, SWE, ht, 0, 0 -2018, 6, 27, 14 90, MEX, SWE, ft, 0, 0 - -2018, 6, 27, 18 0, SER, BRA, ko, 0, 0 -2018, 6, 27, 18 45, SER, BRA, ht, 0, 0 -2018, 6, 27, 18 90, SER, BRA, ft, 0, 0 - -2018, 6, 27, 18 0, SWI, CRC, ko, 0, 0 -2018, 6, 27, 18 45, SWI, CRC, ht, 0, 0 -2018, 6, 27, 18 90, SWI, CRC, ft, 0, 0 - -2018, 6, 28, 14 0, JAP, POL, ko, 0, 0 -2018, 6, 28, 14 45, JAP, POL, ht, 0, 0 -2018, 6, 28, 14 90, JAP, POL, ft, 0, 0 - -2018, 6, 28, 14 0, SEN, COL, ko, 0, 0 -2018, 6, 28, 14 45, SEN, COL, ht, 0, 0 -2018, 6, 28, 14 90, SEN, COL, ft, 0, 0 - -2018, 6, 28, 18 0, ENG, BEL, ko, 0, 0 -2018, 6, 28, 18 45, ENG, BEL, ht, 0, 0 -2018, 6, 28, 18 90, ENG, BEL, ft, 0, 0 - -2018, 6, 28, 18 0, PAN, TUN, ko, 0, 0 -2018, 6, 28, 18 45, PAN, TUN, ht, 0, 0 -2018, 6, 28, 18 90, PAN, TUN, ft, 0, 0 diff --git a/karmapi/wc.py b/karmapi/wc.py index f3d4da5..3feb925 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -1765,8 +1765,13 @@ async def run(self): def dump(game, out): + now = datetime.now() print('dumping') when = game.when + + if when < now: + return + print(when.year, when.month, when.day, when.hour, sep=', ', end=' ', file=out) print(0, game.a, game.b, 'ko', 0, 0, sep=', ', file=out) @@ -1776,10 +1781,19 @@ def dump(game, out): print(when.year, when.month, when.day, when.hour, sep=', ', end=' ', file=out) print(90, game.a, game.b, 'ft', 0, 0, sep=', ', file=out) -def parse_events(events): +def parse_events(events, out=None): + if out: + writer = csv.writer(out) + else: + writer = csv.writer(sys.stdout) + for row in csv.reader(events): - print(row) + + row = row[:4] + row[5:7] + row[4:5] + row[7:] + row = [x.strip() for x in row] + writer.writerow(row) + parser = argparse.ArgumentParser() From 0f04fe2ab58ed54e2f7d68a1baf2bcee5d813157 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 19 Jun 2018 14:41:02 -0400 Subject: [PATCH 338/642] reformat wc.csv --- karmapi/wc.csv | 314 +++++++++++++++++++++++++------------------------ karmapi/wc.py | 15 ++- 2 files changed, 170 insertions(+), 159 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index b3e1e42..c931c8a 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -1,157 +1,159 @@ -year, month, day, hour, minute, ateam, bteam, what, team, player -2018, 6, 14, 15, 0, rus, sau, ko, 0, 0 -2018, 6, 14, 15, 42, rus, sau, goal, rus, 5 -2018, 6, 14, 15, 45, rus, sau, ht, 2, 0 -2018, 6, 14, 15, 71, rus, sau, goal, rus, 22 -2018, 6, 14, 15, 88, rus, sau, yellow, rus, 17 -2018, 6, 14, 15, 91, rus, sau, goal, rus, 6 -2018, 6, 14, 15, 94, rus, sau, goal, rus, 11 -2018, 6, 14, 15, 95, rus, sau, ft, 5, 0 - -2018, 6, 15, 14, 89, egy, urg, goal, urg, 2 -2018, 6, 15, 14, 93, egy, urg, yellow, egy, 5 -2018, 6, 15, 14, 96, egy, urg, yellow, egy, 6 -2018, 6, 15, 14, 96, egy, urg, ft, 1, 0 - -2018, 6, 15, 15, 0, mor, ira, ko, 0, 0 -2018, 6, 15, 15, 10, mor, ira, yellow, ira, 7 -2018, 6, 15, 15, 30, mor, ira, yellow, ira, 8 -2018, 6, 15, 15, 45, mor, ira, ht, 0, 0 -2018, 6, 15, 15, 47, mor, ira, yellow, ira, 18 -2018, 6, 15, 15, 94, mor, ira, goal, ira, 122 -2018, 6, 15, 15, 96, mor, ira, ft, 1, 0 - - -2018, 6, 15, 18, 0, por, spa, ko, 0, 0 -2018, 6, 15, 18, 4, por, spa, goal, por, 7 -2018, 6, 15, 18, 17, por, spa, yellow, spa, 5 -2018, 6, 15, 18, 24, por, spa, goal, spa, 19 -2018, 6, 15, 18, 28, por, spa, yellow, por, 16 -2018, 6, 15, 18, 44, por, spa, goal, por, 7 -2018, 6, 15, 18, 0, por, spa, ht, 2, 1 -2018, 6, 15, 18, 55, por, spa, goal, spa, 19 -2018, 6, 15, 18, 58, por, spa, goal, spa, 4 -2018, 6, 15, 18, 88, por, spa, goal, por, 7 -2018, 6, 15, 18, 0, por, spa, ft, 3, 3 - -2018, 6, 16, 10, 0, fra, aus, ko, 0, 0 -2018, 6, 13, 10, 13, fra, aus, yellow aus, 7 -2018, 6, 16, 10, 45, fra, aus, ht, 0, 0 -2018, 6, 16, 10, 57, fra, aus, yellow aus, 19 -2018, 6, 16, 10, 58, fra, aus, goal, fra, 7 -2018, 6, 16, 10, 62, fra, aus, goal, aus, 15 -2018, 6, 16, 10, 57, fra, aus, yellow fra, 12 -2018, 6, 16, 10, 80, fra, aus, goal, fra, 6 -2018, 6, 16, 10, 87, fra, aus, yellow aus, 16 -2018, 6, 16, 10, 96, fra, aus, ft, 2, 1 - -2018, 6, 16, 13, 0, arg, ice, ko, 0, 0 -2018, 6, 16, 13, 19, arg, ice, goal, arg, 19 -2018, 6, 16, 13, 23, arg, ice, goal, ice, 11 -2018, 6, 16, 13, 45, arg, ice, ht, 1, 1 -2018, 6, 16, 13, 90, arg, ice, ft, 1, 1 - -2018, 6, 16, 14, 0, PER, DEN, ko, 0, 0 -2018, 6, 16, 14, 38, PER, DEN, yellow, per, 13 -2018, 6, 16, 14, 45, PER, DEN, ht, 0, 0 -2018, 6, 16, 14, 58, PER, DEN, goal, per, 20 -2018, 6, 16, 14, 86, PER, DEN, yellow, den, 8 -2018, 6, 16, 14, 93, PER, DEN, yellow, den, 20 -2018, 6, 16, 14, 94, PER, DEN, ft, 0, 1 - -2018, 6, 16, 19, 0, CRO, NIG, ko, 0, 0 -2018, 6, 16, 19, 30, CRO, NIG, yellow, cro, 7 -2018, 6, 16, 19, 32, CRO, NIG, goal, cro, 108 -2018, 6, 16, 19, 45, CRO, NIG, ht, 0, 0 -2018, 6, 16, 19, 70, CRO, NIG, yellow, nig, 5 -2018, 6, 16, 19, 71, CRO, NIG, goal, cro, 10 -2018, 6, 16, 19, 89, CRO, NIG, yellow, cro, 11 -2018, 6, 16, 19, 90, CRO, NIG, ft, 2, 0 - -2018, 6, 17, 12, 0, CRC, SER, ko, 0, 0 -2018, 6, 17, 12, 15, CRC, SER, yellow, crc, 15 -2018, 6, 17, 12, 45, CRC, SER, ht, 0, 0 -2018, 6, 17, 12, 56, CRC, SER, yellow, crc, 20 -2018, 6, 17, 12, 0, CRC, SER, goal, ser, 11 -2018, 6, 17, 12, 59, CRC, SER, yellow, ser, 6 -2018, 6, 17, 12, 98, CRC, SER, yellow, ser, 8 -2018, 6, 17, 12, 98, CRC, SER, ft, 0, 1 - -2018, 6, 17, 15, 0, GER, MEX, ko, 0, 0 -2018, 6, 17, 15, 35, GER, MEX, goal, mex, 22 -2018, 6, 17, 15, 40, GER, MEX, yellow, mex, 15 -2018, 6, 17, 15, 45, GER, MEX, ht, 0, 1 -2018, 6, 17, 15, 83, GER, MEX, yellow, ger, 13 -2018, 6, 17, 83, 84, GER, MEX, yellow, ger, 5 -2018, 6, 17, 15, 90, GER, MEX, yellow, mex, 16 -2018, 6, 17, 15, 93, GER, MEX, ft, 0, 1 - -2018, 6, 17, 18, 0, BRA, SWI, ko, 0, 0 -2018, 6, 17, 18, 20, BRA, SWI, goal, bra, 11 -2018, 6, 17, 18, 31, BRA, SWI, yellow, swi, 2 -2018, 6, 17, 18, 45, BRA, SWI, ht, 1, 0 -2018, 6, 17, 18, 47, BRA, SWI, yellow, swi, 5 -2018, 6, 17, 18, 49, BRA, SWI, goal, swi, 14 -2018, 6, 17, 18, 65, BRA, SWI, yellow, swi, 22 -2018, 6, 17, 18, 68, BRA, SWI, yellow, swi, 11 -2018, 6, 17, 18 90, BRA, SWI, ft, 1, 1 - -2018, 6, 18, 12, 0, SWE, SKO, ko, 0, 0 -2018, 6, 18, 12, 12, SWE, SKO, yellow, sko, 9 -2018, 6, 18, 12, 45, SWE, SKO, ht, 0, 0 -2018, 6, 18, 12, 55, SWE, SKO, yellow, sko, 11 -2018, 6, 18, 12, 61, SWE, SKO, yellow, swe, 17 -2018, 6, 18, 12, 65, SWE, SKO, goal, swe, 17 -2018, 6, 18, 12, 90, SWE, SKO, ft, 1, 0 - -2018, 6, 18, 15, 0, BEL, PAN, ko, 0, 0 -2018, 6, 18, 15, 14, BEL, PAN, yellow, bel, 15 -2018, 6, 18, 15, 18, BEL, PAN, yellow, pan, 15 -2018, 6, 18, 15, 45, BEL, PAN, ht, 0, 0 -2018, 6, 18, 15, 47, BEL, PAN, goal, bel, 14 -2018, 6, 18, 15, 49, BEL, PAN, yellow, pan, 11 -2018, 6, 18, 15, 51, BEL, PAN, yellow, pan, 2 -2018, 6, 18, 15, 57, BEL, PAN, yellow, pan, 20 -2018, 6, 18, 15, 59, BEL, PAN, yellow, bel, 5 -2018, 6, 18, 15, 51, BEL, PAN, yellow, pan, 2 -2018, 6, 18, 15, 69, BEL, PAN, goal, bel, 9 -2018, 6, 18, 15, 75, BEL, PAN, goal, bel, 9 -2018, 6, 18, 15, 88, BEL, PAN, yellow, bel, 7 -2018, 6, 18, 15, 90, BEL, PAN, ft, 3, 0 - -2018, 6, 18, 18, 0, TUN, ENG, ko, 0, 0 -2018, 6, 18, 18, 11, TUN, ENG, goal, eng, 9 -2018, 6, 18, 18, 33, TUN, ENG, yellow, eng, 2 -2018, 6, 18, 18, 35, TUN, ENG, goal, tun, 13 -2018, 6, 18, 18, 45, TUN, ENG, ht, 1, 1 -2018, 6, 18, 18, 91, TUN, ENG, goal, eng, 9 -2018, 6, 18, 18, 95, TUN, ENG, ft, 1, 2 - -2018, 6, 19, 12, 0, COL, JAP, ko, 0, 0 -2018, 6, 19, 12, 3, COL, JAP, red, urg, 6 -2018, 6, 19, 12, 6, COL, JAP, goal, jap, 10 -2018, 6, 19, 12, 39, COL, JAP, goal, col, 20 -2018, 6, 19, 12, 45, COL, JAP, ht, 1, 1 -2018, 6, 19, 12, 64, COL, JAP, yellow, col, 5 -2018, 6, 19, 12, 73, COL, JAP, goal, jap, 15 -2018, 6, 19, 12, 86, COL, JAP, yellow, col, 10 -2018, 6, 19, 12, 93, COL, JAP, yellow, jap, 1 -2018, 6, 19, 12, 94, COL, JAP, ft, 1, 2 - -2018, 6, 19, 15, 0, POL, SEN, ko, 0, 0 -2018, 6, 19, 15, 12, POL, SEN, yellow, pol, 10 -2018, 6, 19, 15, 37, POL, SEN, goal, sen, 104 -2018, 6, 19, 15, 45, POL, SEN, ht, 0, 1 -2018, 6, 19, 15, 60, POL, SEN, goal, sen, 19 -2018, 6, 19, 15, 72, POL, SEN, yellow, sen, 5 -2018, 6, 19, 49, 0, POL, SEN, yellow, sen, 6 -2018, 6, 19, 15, 86, POL, SEN, goal, pol, 10 -2018, 6, 19, 15, 95, POL, SEN, ft, 0, 0 - -2018, 6, 19, 18, 0, RUS, EGY, ko, 0, 0 -2018, 6, 19, , 0, RUS, EGY, -2018, 6, 19, , 0, RUS, EGY, -2018, 6, 19, , 0, RUS, EGY, -2018, 6, 19, 18, 45, RUS, EGY, ht, 0, 0 -2018, 6, 19, 18, 90, RUS, EGY, ft, 0, 0 +It's a knock out! +year,month,day,hour,ateam,bteam,minute,what,team,player +2018,6,14,15,rus,sau,0,ko,0,0 +2018,6,14,15,rus,sau,42,goal,rus,5 +2018,6,14,15,rus,sau,45,ht,2,0 +2018,6,14,15,rus,sau,71,goal,rus,22 +2018,6,14,15,rus,sau,88,yellow,rus,17 +2018,6,14,15,rus,sau,91,goal,rus,6 +2018,6,14,15,rus,sau,94,goal,rus,11 +2018,6,14,15,rus,sau,95,ft,5,0 + +2018,6,15,14,egy,urg,89,goal,urg,2 +2018,6,15,14,egy,urg,93,yellow,egy,5 +2018,6,15,14,egy,urg,96,yellow,egy,6 +2018,6,15,14,egy,urg,96,ft,1,0 + +2018,6,15,15,mor,ira,0,ko,0,0 +2018,6,15,15,mor,ira,10,yellow,ira,7 +2018,6,15,15,mor,ira,30,yellow,ira,8 +2018,6,15,15,mor,ira,45,ht,0,0 +2018,6,15,15,mor,ira,47,yellow,ira,18 +2018,6,15,15,mor,ira,94,goal,ira,122 +2018,6,15,15,mor,ira,96,ft,1,0 + + +2018,6,15,18,por,spa,0,ko,0,0 +2018,6,15,18,por,spa,4,goal,por,7 +2018,6,15,18,por,spa,17,yellow,spa,5 +2018,6,15,18,por,spa,24,goal,spa,19 +2018,6,15,18,por,spa,28,yellow,por,16 +2018,6,15,18,por,spa,44,goal,por,7 +2018,6,15,18,por,spa,0,ht,2,1 +2018,6,15,18,por,spa,55,goal,spa,19 +2018,6,15,18,por,spa,58,goal,spa,4 +2018,6,15,18,por,spa,88,goal,por,7 +2018,6,15,18,por,spa,0,ft,3,3 + +2018,6,16,10,fra,aus,0,ko,0,0 +2018,6,13,10,fra,aus,13,yellow aus,7 +2018,6,16,10,fra,aus,45,ht,0,0 +2018,6,16,10,fra,aus,57,yellow aus,19 +2018,6,16,10,fra,aus,58,goal,fra,7 +2018,6,16,10,fra,aus,62,goal,aus,15 +2018,6,16,10,fra,aus,57,yellow fra,12 +2018,6,16,10,fra,aus,80,goal,fra,6 +2018,6,16,10,fra,aus,87,yellow aus,16 +2018,6,16,10,fra,aus,96,ft,2,1 + +2018,6,16,13,arg,ice,0,ko,0,0 +2018,6,16,13,arg,ice,19,goal,arg,19 +2018,6,16,13,arg,ice,23,goal,ice,11 +2018,6,16,13,arg,ice,45,ht,1,1 +2018,6,16,13,arg,ice,90,ft,1,1 + +2018,6,16,14,PER,DEN,0,ko,0,0 +2018,6,16,14,PER,DEN,38,yellow,per,13 +2018,6,16,14,PER,DEN,45,ht,0,0 +2018,6,16,14,PER,DEN,58,goal,per,20 +2018,6,16,14,PER,DEN,86,yellow,den,8 +2018,6,16,14,PER,DEN,93,yellow,den,20 +2018,6,16,14,PER,DEN,94,ft,0,1 + +2018,6,16,19,CRO,NIG,0,ko,0,0 +2018,6,16,19,CRO,NIG,30,yellow,cro,7 +2018,6,16,19,CRO,NIG,32,goal,cro,108 +2018,6,16,19,CRO,NIG,45,ht,0,0 +2018,6,16,19,CRO,NIG,70,yellow,nig,5 +2018,6,16,19,CRO,NIG,71,goal,cro,10 +2018,6,16,19,CRO,NIG,89,yellow,cro,11 +2018,6,16,19,CRO,NIG,90,ft,2,0 + +2018,6,17,12,CRC,SER,0,ko,0,0 +2018,6,17,12,CRC,SER,15,yellow,crc,15 +2018,6,17,12,CRC,SER,45,ht,0,0 +2018,6,17,12,CRC,SER,56,yellow,crc,20 +2018,6,17,12,CRC,SER,0,goal,ser,11 +2018,6,17,12,CRC,SER,59,yellow,ser,6 +2018,6,17,12,CRC,SER,98,yellow,ser,8 +2018,6,17,12,CRC,SER,98,ft,0,1 + +2018,6,17,15,GER,MEX,0,ko,0,0 +2018,6,17,15,GER,MEX,35,goal,mex,22 +2018,6,17,15,GER,MEX,40,yellow,mex,15 +2018,6,17,15,GER,MEX,45,ht,0,1 +2018,6,17,15,GER,MEX,83,yellow,ger,13 +2018,6,17,83,GER,MEX,84,yellow,ger,5 +2018,6,17,15,GER,MEX,90,yellow,mex,16 +2018,6,17,15,GER,MEX,93,ft,0,1 + +2018,6,17,18,BRA,SWI,0,ko,0,0 +2018,6,17,18,BRA,SWI,20,goal,bra,11 +2018,6,17,18,BRA,SWI,31,yellow,swi,2 +2018,6,17,18,BRA,SWI,45,ht,1,0 +2018,6,17,18,BRA,SWI,47,yellow,swi,5 +2018,6,17,18,BRA,SWI,49,goal,swi,14 +2018,6,17,18,BRA,SWI,65,yellow,swi,22 +2018,6,17,18,BRA,SWI,68,yellow,swi,11 +2018,6,17,18 90,SWI,ft,BRA,1,1 + +2018,6,18,12,SWE,SKO,0,ko,0,0 +2018,6,18,12,SWE,SKO,12,yellow,sko,9 +2018,6,18,12,SWE,SKO,45,ht,0,0 +2018,6,18,12,SWE,SKO,55,yellow,sko,11 +2018,6,18,12,SWE,SKO,61,yellow,swe,17 +2018,6,18,12,SWE,SKO,65,goal,swe,17 +2018,6,18,12,SWE,SKO,90,ft,1,0 + +2018,6,18,15,BEL,PAN,0,ko,0,0 +2018,6,18,15,BEL,PAN,14,yellow,bel,15 +2018,6,18,15,BEL,PAN,18,yellow,pan,15 +2018,6,18,15,BEL,PAN,45,ht,0,0 +2018,6,18,15,BEL,PAN,47,goal,bel,14 +2018,6,18,15,BEL,PAN,49,yellow,pan,11 +2018,6,18,15,BEL,PAN,51,yellow,pan,2 +2018,6,18,15,BEL,PAN,57,yellow,pan,20 +2018,6,18,15,BEL,PAN,59,yellow,bel,5 +2018,6,18,15,BEL,PAN,51,yellow,pan,2 +2018,6,18,15,BEL,PAN,69,goal,bel,9 +2018,6,18,15,BEL,PAN,75,goal,bel,9 +2018,6,18,15,BEL,PAN,88,yellow,bel,7 +2018,6,18,15,BEL,PAN,90,ft,3,0 + +2018,6,18,18,TUN,ENG,0,ko,0,0 +2018,6,18,18,TUN,ENG,11,goal,eng,9 +2018,6,18,18,TUN,ENG,33,yellow,eng,2 +2018,6,18,18,TUN,ENG,35,goal,tun,13 +2018,6,18,18,TUN,ENG,45,ht,1,1 +2018,6,18,18,TUN,ENG,91,goal,eng,9 +2018,6,18,18,TUN,ENG,95,ft,1,2 + +2018,6,19,12,COL,JAP,0,ko,0,0 +2018,6,19,12,COL,JAP,3,red,urg,6 +2018,6,19,12,COL,JAP,6,goal,jap,10 +2018,6,19,12,COL,JAP,39,goal,col,20 +2018,6,19,12,COL,JAP,45,ht,1,1 +2018,6,19,12,COL,JAP,64,yellow,col,5 +2018,6,19,12,COL,JAP,73,goal,jap,15 +2018,6,19,12,COL,JAP,86,yellow,col,10 +2018,6,19,12,COL,JAP,93,yellow,jap,1 +2018,6,19,12,COL,JAP,94,ft,1,2 + +2018,6,19,15,POL,SEN,0,ko,0,0 +2018,6,19,15,POL,SEN,12,yellow,pol,10 +2018,6,19,15,POL,SEN,37,goal,sen,104 +2018,6,19,15,POL,SEN,45,ht,0,1 +2018,6,19,15,POL,SEN,60,goal,sen,19 +2018,6,19,15,POL,SEN,72,yellow,sen,5 +2018,6,19,49,POL,SEN,0,yellow,sen,6 +2018,6,19,15,POL,SEN,86,goal,pol,10 +2018,6,19,15,POL,SEN,95,ft,0,0 + +2018,6,19,18,RUS,EGY,0,ko,0,0 +2018,6,19,,RUS,EGY,0, +2018,6,19,,RUS,EGY,0, +2018,6,19,,RUS,EGY,0, +2018,6,19,18,RUS,EGY,45,ht,0,0 +2018,6,19,18,RUS,EGY,90,ft,0,0 + diff --git a/karmapi/wc.py b/karmapi/wc.py index 3feb925..6466a64 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -1773,16 +1773,25 @@ def dump(game, out): return print(when.year, when.month, when.day, when.hour, sep=', ', end=' ', file=out) - print(0, game.a, game.b, 'ko', 0, 0, sep=', ', file=out) + print(game.a, game.b, 0, 'ko', 0, 0, sep=', ', file=out) print(when.year, when.month, when.day, when.hour, sep=', ', end=' ', file=out) - print(45, game.a, game.b, 'ht', 0, 0, sep=', ', file=out) + print(game.a, game.b, 45, 'ht', 0, 0, sep=', ', file=out) print(when.year, when.month, when.day, when.hour, sep=', ', end=' ', file=out) - print(90, game.a, game.b, 'ft', 0, 0, sep=', ', file=out) + print(game.a, game.b, 90, 'ft', 0, 0, sep=', ', file=out) def parse_events(events, out=None): + return shuffle_events(events, out) + + for row in csv.reader(events): + pass + + + +def shuffle_events(events, out=None): + if out: writer = csv.writer(out) else: From 95743d1dc9d58e95c3c1c2722f1165a0b3614c1f Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 19 Jun 2018 14:58:44 -0400 Subject: [PATCH 339/642] now what to do with events? --- karmapi/wc.csv | 4 +--- karmapi/wc.py | 24 ++++++++++++++++++++++-- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index c931c8a..faf08d8 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -1,5 +1,3 @@ - -It's a knock out! year,month,day,hour,ateam,bteam,minute,what,team,player 2018,6,14,15,rus,sau,0,ko,0,0 2018,6,14,15,rus,sau,42,goal,rus,5 @@ -151,9 +149,9 @@ year,month,day,hour,ateam,bteam,minute,what,team,player 2018,6,19,15,POL,SEN,95,ft,0,0 2018,6,19,18,RUS,EGY,0,ko,0,0 +2018,6,19,18,RUS,EGY,45,ht,0,0 2018,6,19,,RUS,EGY,0, 2018,6,19,,RUS,EGY,0, 2018,6,19,,RUS,EGY,0, -2018,6,19,18,RUS,EGY,45,ht,0,0 2018,6,19,18,RUS,EGY,90,ft,0,0 diff --git a/karmapi/wc.py b/karmapi/wc.py index 6466a64..65574ef 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -1783,9 +1783,25 @@ def dump(game, out): def parse_events(events, out=None): - return shuffle_events(events, out) + if out: + out = csv.writer(out) for row in csv.reader(events): + + if out: + row = [x.strip() for x in row] + out.writerow(row) + continue + + year, month, day, hour = [int(x) for x in row[:4]] + + a, b = row[4], row[5] + + minute = int(row[6]) + what = row[7].strip().lower() + extras = [x.strip().lower() for x in row[8:]] + + # Need to find the game the event applies to pass @@ -1810,6 +1826,7 @@ def shuffle_events(events, out=None): parser.add_argument('--gallery') parser.add_argument('--dump') parser.add_argument('--events') +parser.add_argument('--outfile') args = parser.parse_args() if args.nopig: @@ -1823,10 +1840,13 @@ def shuffle_events(events, out=None): if xdump: xdump = open(args.dump, 'w') +if args.outfile: + args.outfile = open(args.outfile, 'w') + if args.events: args.events = open(args.events) - parse_events(args.events) + parse_events(args.events, args.outfile) sys.exit() From 009caa102eff1ea9d23478e83d0e4fbf4fd39309 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 19 Jun 2018 15:38:38 -0400 Subject: [PATCH 340/642] update wc.py scores --- karmapi/wc.csv | 10 ++++++---- karmapi/wc.py | 16 ++++++++-------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index faf08d8..beef39f 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -146,12 +146,14 @@ year,month,day,hour,ateam,bteam,minute,what,team,player 2018,6,19,15,POL,SEN,72,yellow,sen,5 2018,6,19,49,POL,SEN,0,yellow,sen,6 2018,6,19,15,POL,SEN,86,goal,pol,10 -2018,6,19,15,POL,SEN,95,ft,0,0 +2018,6,19,15,POL,SEN,95,ft,1,2 2018,6,19,18,RUS,EGY,0,ko,0,0 2018,6,19,18,RUS,EGY,45,ht,0,0 -2018,6,19,,RUS,EGY,0, -2018,6,19,,RUS,EGY,0, -2018,6,19,,RUS,EGY,0, +2018,6,19,,RUS,EGY, 46, rus, goal, 107 +2018,6,19,,RUS,EGY, 57, yellow, egy, 21 +2018,6,19,,RUS,EGY, 59, rus, goal, 6 +2018,6,19,,RUS,EGY, 62, rus, goal, 22 +2018,6,19,,RUS,EGY, 73, egy, goal, 10 2018,6,19,18,RUS,EGY,90,ft,0,0 diff --git a/karmapi/wc.py b/karmapi/wc.py index 65574ef..5f923a3 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -1219,11 +1219,11 @@ class NorthPole(Place): games = [ Game(crc, ser, datetime(2018, 6, 17, 12, 0), where=places['samara'], - ascore=None, bscore=None), + ascore=0, bscore=1), Game(bra, swi, datetime(2018, 6, 17, 18, 0), where=places['rostovondon'], - ascore=None, bscore=None), + ascore=1, bscore=1), Game(bra, crc, datetime(2018, 6, 22, 12, 0), @@ -1246,11 +1246,11 @@ class NorthPole(Place): games = [ Game(ger, mex, datetime(2018, 6, 17, 15, 0), where=places['moscow'], - ascore=None, bscore=None), + ascore=0, bscore=1), Game(swe, sko, datetime(2018, 6, 18, 12, 0), where=places['novgorod'], - ascore=None, bscore=None), + ascore=1, bscore=0), Game(sko, mex, datetime(2018, 6, 23, 15, 0), @@ -1273,11 +1273,11 @@ class NorthPole(Place): games = [ Game(bel, pan, datetime(2018, 6, 18, 15, 0), where=places['sochi'], - ascore=None, bscore=None), + ascore=3, bscore=0), Game(tun, eng, datetime(2018, 6, 18, 18, 0), where=places['volgograd'], - ascore=None, bscore=None), + ascore=1, bscore=2), Game(bel, tun, datetime(2018, 6, 23, 12, 0), @@ -1301,11 +1301,11 @@ class NorthPole(Place): games = [ Game(col, jap, datetime(2018, 6, 19, 12, 0), where=places['saransk'], - ascore=None, bscore=None), + ascore=1, bscore=2), Game(pol, sen, datetime(2018, 6, 19, 15, 0), where=places['spartak'], - ascore=None, bscore=None), + ascore=1, bscore=2), Game(jap, sen, datetime(2018, 6, 24, 15, 0), From 6af952ec29f166ab1c3334b4b8e5f0154ab8a941 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 19 Jun 2018 15:58:14 -0400 Subject: [PATCH 341/642] more wc data --- karmapi/wc.csv | 1 + karmapi/wc.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index beef39f..82bbe53 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -155,5 +155,6 @@ year,month,day,hour,ateam,bteam,minute,what,team,player 2018,6,19,,RUS,EGY, 59, rus, goal, 6 2018,6,19,,RUS,EGY, 62, rus, goal, 22 2018,6,19,,RUS,EGY, 73, egy, goal, 10 +2018,6,19,,RUS,EGY, 84, rus, yellow, 10 2018,6,19,18,RUS,EGY,90,ft,0,0 diff --git a/karmapi/wc.py b/karmapi/wc.py index 5f923a3..7f1365a 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -1116,7 +1116,7 @@ class NorthPole(Place): Game(rus, egy, datetime(2018, 6, 19, 18, 0), where=places['stpetersberg'], - ), + ascore=3, bscore=1), Game(urg, sau, datetime(2018, 6, 20, 15, 0), where=places['rostovondon'], From 65c7b61bf8e02a5ae9f6fc8f98fc41ba9b6bf3a8 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 20 Jun 2018 09:53:59 -0400 Subject: [PATCH 342/642] start cpr docs --- docs/cpr.rst | 24 ++++++++++++++++++++++++ karmapi/wc.csv | 13 +++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 docs/cpr.rst diff --git a/docs/cpr.rst b/docs/cpr.rst new file mode 100644 index 0000000..3ef73a3 --- /dev/null +++ b/docs/cpr.rst @@ -0,0 +1,24 @@ +================ + Colin P Rourke +================ + +*A new paradigm on the universe.* + +Or CPU central processsor unit? + +CP R s t U + +CPR: show time universe + +Simulate nested spherical waves. + +So what is going on here? + +Mach and de Sciama +================== + +de Sitter Space +=============== + +Time +==== diff --git a/karmapi/wc.csv b/karmapi/wc.csv index 82bbe53..bda39f1 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -158,3 +158,16 @@ year,month,day,hour,ateam,bteam,minute,what,team,player 2018,6,19,,RUS,EGY, 84, rus, yellow, 10 2018,6,19,18,RUS,EGY,90,ft,0,0 +2018, 6, 20, 12 POR, MOR, 0, ko, 0, 0 +2018, 6, 20, 12 POR, MOR, 4, goal, por, 7 +2018, 6, 20, 12 POR, MOR, 40, yellow, mor, 5 +2018, 6, 20, 12 POR, MOR, 45, ht, 1, 0 +2018, 6, 20, 12 POR, MOR, 90, ft, 1, 0 + +2018, 6, 20, 15 URG, SAU, 0, ko, 0, 0 +2018, 6, 20, 15 URG, SAU, 45, ht, 0, 0 +2018, 6, 20, 15 URG, SAU, 90, ft, 0, 0 + +2018, 6, 20, 18 IRA, SPA, 0, ko, 0, 0 +2018, 6, 20, 18 IRA, SPA, 45, ht, 0, 0 +2018, 6, 20, 18 IRA, SPA, 90, ft, 0, 0 From a0095ef408d1170d5c02239dca8f0ba55ab08954 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 22 Jun 2018 12:14:02 -0400 Subject: [PATCH 343/642] inching along with events --- karmapi/wc.csv | 58 ++++++++++++++++++++++++++++++++++++++++++++++++-- karmapi/wc.py | 10 ++++++--- 2 files changed, 63 insertions(+), 5 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index bda39f1..9a5dcde 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -165,9 +165,63 @@ year,month,day,hour,ateam,bteam,minute,what,team,player 2018, 6, 20, 12 POR, MOR, 90, ft, 1, 0 2018, 6, 20, 15 URG, SAU, 0, ko, 0, 0 -2018, 6, 20, 15 URG, SAU, 45, ht, 0, 0 -2018, 6, 20, 15 URG, SAU, 90, ft, 0, 0 +2018, 6, 20, 15 URG, SAU, 23, goal, urg, 9 +2018, 6, 20, 15 URG, SAU, 45, ht, 1, 0 +2018, 6, 20, 15 URG, SAU, 90, ft, 1, 0 2018, 6, 20, 18 IRA, SPA, 0, ko, 0, 0 2018, 6, 20, 18 IRA, SPA, 45, ht, 0, 0 +2018, 6, 20, 18 IRA, SPA, 54, goal, spa, 19 +2018, 6, 20, 18 IRA, SPA, 79, yellow, ira, 11 +2018, 6, 20, 18 IRA, SPA, 92, yellow, ira, 9 2018, 6, 20, 18 IRA, SPA, 90, ft, 0, 0 + +2018, 6, 21, 12 DEN, AUS, 0, ko, 0, 0 +2018, 6, 21, 12 DEN, AUS, 7, goal, den, 10 +2018, 6, 21, 12 DEN, AUS, 37, yellow, den, 20 +2018, 6, 21, 12 DEN, AUS, 38, goal, aus, 15 +2018, 6, 21, 12 DEN, AUS, 45, ht, 1, 1 +2018, 6, 21, 12 DEN, AUS, 84, yellow, den, 23 +2018, 6, 21, 12 DEN, AUS, 90, ft, 1, 1 + +2018, 6, 21, 15 FRA, PER, 0, ko, 0, 0 +2018, 6, 21, 15 FRA, PER, 18, yellow, fra, 14 +2018, 6, 21, 15 FRA, PER, 23, yellow, per, 9 +2018, 6, 21, 15 FRA, PER, 34, goal, fra, 10 +2018, 6, 21, 15 FRA, PER, 45, ht, 1, 0 +2018, 6, 21, 15 FRA, PER, 81, yellow, per, 23 +2018, 6, 21, 15 FRA, PER, 86, yellow, fra, 6 +2018, 6, 21, 15 FRA, PER, 90, ft, 1, 0 + +2018, 6, 21, 18 ARG, CRO, 0, ko, 0, 0 +2018, 6, 21, 18 ARG, CRO, 39, yellow, cro, 18 +2018, 6, 21, 18 ARG, CRO, 45, ht, 0, 0 +2018, 6, 21, 18 ARG, CRO, 51, yellow, arg, 2 +2018, 6, 21, 18 ARG, CRO, 53, goal, cro, 18 +2018, 6, 21, 18 ARG, CRO, 58, yellow, cro, 17 +2018, 6, 21, 18 ARG, CRO, 67, yellow, cro, 2 +2018, 6, 21, 18 ARG, CRO, 80, goal, cro, 10 +2018, 6, 21, 18 ARG, CRO, 85, yellow, arg, 17 +2018, 6, 21, 18 ARG, CRO, 87, yellow, arg, 8 +2018, 6, 21, 18 ARG, CRO, 91, goal, cro, 7 +2018, 6, 21, 18 ARG, CRO, 94, yellow, cro, 5 +2018, 6, 21, 18 ARG, CRO, 95, ft, 0, 0 + +2018, 6, 22, 12 BRA, CRC, 0, ko, 0, 0 +2018, 6, 22, 12 BRA, CRC, 45, ht, 0, 0 +2018, 6, 22, 12 BRA, CRC, 81, yellow, bra, 10 +2018, 6, 22, 12 BRA, CRC, 81, yellow, bra, 11 +2018, 6, 22, 12 BRA, CRC, 84, yellow, crc, 2 +2018, 6, 22, 12 BRA, CRC, 91, goal, bra, 11 +2018, 6, 22, 12 BRA, CRC, 97, goal, bra, 10 +2018, 6, 22, 12 BRA, CRC, 99, ft, 2, 0 + +2018, 6, 22, 15 NIG, ICE, 0, ko, 0, 0 +2018, 6, 22, 15 NIG, ICE, 44, yellow, nig, 2 +2018, 6, 22, 15 NIG, ICE, 45, ht, 0, 0 +2018, 6, 22, 15 NIG, ICE, 49, goal, nig, 7 +2018, 6, 22, 15 NIG, ICE, 90, ft, 1, 0 + +2018, 6, 22, 18 SER, SWI, 0, ko, 0, 0 +2018, 6, 22, 18 SER, SWI, 45, ht, 0, 0 +2018, 6, 22, 18 SER, SWI, 90, ft, 0, 0 diff --git a/karmapi/wc.py b/karmapi/wc.py index 7f1365a..c98aba6 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -114,7 +114,7 @@ from random import random, randint import argparse import csv -from collections import Counter, defaultdict +from collections import Counter, defaultdict, deque from datetime import datetime, timedelta import calendar import sys @@ -701,11 +701,15 @@ def __init__(self, groups, places=None, dates=None, now=None): self.sleep = 0.01 self.games = curio.PriorityQueue() - self.events = curio.UniversalQueue() self.knockout = [] self.winners = {} self.seconds = {} + self.events = curio.UniversalQueue() + + self.game_events = deque() + + async def load_group_games(self): """ Put the group games into the game queue """ for label, group in self.groups.items(): @@ -1416,7 +1420,7 @@ def __init__(self, parent, jsf=None, venues=None, gallery='.', self.group_view = False self.which_group = 0 - + async def slower(self): """ Go through time more slowly """ self.delta_t /= 2 From 9d53ebe4e638a4a8d04ea52f4a2a98f04c24d4d4 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 22 Jun 2018 15:54:35 -0400 Subject: [PATCH 344/642] more wc group events --- karmapi/wc.csv | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index 9a5dcde..6b6c9cb 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -220,8 +220,15 @@ year,month,day,hour,ateam,bteam,minute,what,team,player 2018, 6, 22, 15 NIG, ICE, 44, yellow, nig, 2 2018, 6, 22, 15 NIG, ICE, 45, ht, 0, 0 2018, 6, 22, 15 NIG, ICE, 49, goal, nig, 7 -2018, 6, 22, 15 NIG, ICE, 90, ft, 1, 0 +2018, 6, 22, 15 NIG, ICE, 75, goal, nig, 7 +2018, 6, 22, 15 NIG, ICE, 90, ft, 2, 0 2018, 6, 22, 18 SER, SWI, 0, ko, 0, 0 -2018, 6, 22, 18 SER, SWI, 45, ht, 0, 0 -2018, 6, 22, 18 SER, SWI, 90, ft, 0, 0 +2018, 6, 22, 18 SER, SWI, 5, goal, ser, 9 +2018, 6, 22, 18 SER, SWI, 33, yellow, ser, 20 +2018, 6, 22, 18 SER, SWI, 39, yellow, ser, 4 +2018, 6, 22, 18 SER, SWI, 47, yellow, ser, 21 +2018, 6, 22, 18 SER, SWI, 47, ht, 1, 0 +2018, 6, 22, 18 SER, SWI, 52, goal, swi, 10 +2018, 6, 22, 18 SER, SWI, 89, goal, swi, 23 +2018, 6, 22, 18 SER, SWI, 90, ft, 1, 2 From f37e53e7ba350f8acc231ded2e5ba1c41a4aa45e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 22 Jun 2018 20:09:24 -0400 Subject: [PATCH 345/642] wc event parsing limping into life --- karmapi/wc.csv | 168 ++++++++++++++++++++++++------------------------- karmapi/wc.py | 68 ++++++++++++++------ 2 files changed, 133 insertions(+), 103 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index 6b6c9cb..3edb4e2 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -1,4 +1,4 @@ -year,month,day,hour,ateam,bteam,minute,what,team,player +#year,month,day,hour,ateam,bteam,minute,what,team,player 2018,6,14,15,rus,sau,0,ko,0,0 2018,6,14,15,rus,sau,42,goal,rus,5 2018,6,14,15,rus,sau,45,ht,2,0 @@ -82,7 +82,7 @@ year,month,day,hour,ateam,bteam,minute,what,team,player 2018,6,17,15,GER,MEX,40,yellow,mex,15 2018,6,17,15,GER,MEX,45,ht,0,1 2018,6,17,15,GER,MEX,83,yellow,ger,13 -2018,6,17,83,GER,MEX,84,yellow,ger,5 +2018,6,17,15,GER,MEX,84,yellow,ger,5 2018,6,17,15,GER,MEX,90,yellow,mex,16 2018,6,17,15,GER,MEX,93,ft,0,1 @@ -94,7 +94,7 @@ year,month,day,hour,ateam,bteam,minute,what,team,player 2018,6,17,18,BRA,SWI,49,goal,swi,14 2018,6,17,18,BRA,SWI,65,yellow,swi,22 2018,6,17,18,BRA,SWI,68,yellow,swi,11 -2018,6,17,18 90,SWI,ft,BRA,1,1 +2018,6,17,18,BRA,SWI,90,ft,BRA,1,1 2018,6,18,12,SWE,SKO,0,ko,0,0 2018,6,18,12,SWE,SKO,12,yellow,sko,9 @@ -142,93 +142,93 @@ year,month,day,hour,ateam,bteam,minute,what,team,player 2018,6,19,15,POL,SEN,12,yellow,pol,10 2018,6,19,15,POL,SEN,37,goal,sen,104 2018,6,19,15,POL,SEN,45,ht,0,1 +2018,6,19,15,POL,SEN,49,yellow,sen,6 2018,6,19,15,POL,SEN,60,goal,sen,19 2018,6,19,15,POL,SEN,72,yellow,sen,5 -2018,6,19,49,POL,SEN,0,yellow,sen,6 2018,6,19,15,POL,SEN,86,goal,pol,10 2018,6,19,15,POL,SEN,95,ft,1,2 2018,6,19,18,RUS,EGY,0,ko,0,0 2018,6,19,18,RUS,EGY,45,ht,0,0 -2018,6,19,,RUS,EGY, 46, rus, goal, 107 -2018,6,19,,RUS,EGY, 57, yellow, egy, 21 -2018,6,19,,RUS,EGY, 59, rus, goal, 6 -2018,6,19,,RUS,EGY, 62, rus, goal, 22 -2018,6,19,,RUS,EGY, 73, egy, goal, 10 -2018,6,19,,RUS,EGY, 84, rus, yellow, 10 +2018,6,19,18,RUS,EGY, 46, rus, goal, 107 +2018,6,19,18,RUS,EGY, 57, yellow, egy, 21 +2018,6,19,18,RUS,EGY, 59, rus, goal, 6 +2018,6,19,18,RUS,EGY, 62, rus, goal, 22 +2018,6,19,18,RUS,EGY, 73, egy, goal, 10 +2018,6,19,18,RUS,EGY, 84, rus, yellow, 10 2018,6,19,18,RUS,EGY,90,ft,0,0 -2018, 6, 20, 12 POR, MOR, 0, ko, 0, 0 -2018, 6, 20, 12 POR, MOR, 4, goal, por, 7 -2018, 6, 20, 12 POR, MOR, 40, yellow, mor, 5 -2018, 6, 20, 12 POR, MOR, 45, ht, 1, 0 -2018, 6, 20, 12 POR, MOR, 90, ft, 1, 0 - -2018, 6, 20, 15 URG, SAU, 0, ko, 0, 0 -2018, 6, 20, 15 URG, SAU, 23, goal, urg, 9 -2018, 6, 20, 15 URG, SAU, 45, ht, 1, 0 -2018, 6, 20, 15 URG, SAU, 90, ft, 1, 0 - -2018, 6, 20, 18 IRA, SPA, 0, ko, 0, 0 -2018, 6, 20, 18 IRA, SPA, 45, ht, 0, 0 -2018, 6, 20, 18 IRA, SPA, 54, goal, spa, 19 -2018, 6, 20, 18 IRA, SPA, 79, yellow, ira, 11 -2018, 6, 20, 18 IRA, SPA, 92, yellow, ira, 9 -2018, 6, 20, 18 IRA, SPA, 90, ft, 0, 0 - -2018, 6, 21, 12 DEN, AUS, 0, ko, 0, 0 -2018, 6, 21, 12 DEN, AUS, 7, goal, den, 10 -2018, 6, 21, 12 DEN, AUS, 37, yellow, den, 20 -2018, 6, 21, 12 DEN, AUS, 38, goal, aus, 15 -2018, 6, 21, 12 DEN, AUS, 45, ht, 1, 1 -2018, 6, 21, 12 DEN, AUS, 84, yellow, den, 23 -2018, 6, 21, 12 DEN, AUS, 90, ft, 1, 1 - -2018, 6, 21, 15 FRA, PER, 0, ko, 0, 0 -2018, 6, 21, 15 FRA, PER, 18, yellow, fra, 14 -2018, 6, 21, 15 FRA, PER, 23, yellow, per, 9 -2018, 6, 21, 15 FRA, PER, 34, goal, fra, 10 -2018, 6, 21, 15 FRA, PER, 45, ht, 1, 0 -2018, 6, 21, 15 FRA, PER, 81, yellow, per, 23 -2018, 6, 21, 15 FRA, PER, 86, yellow, fra, 6 -2018, 6, 21, 15 FRA, PER, 90, ft, 1, 0 - -2018, 6, 21, 18 ARG, CRO, 0, ko, 0, 0 -2018, 6, 21, 18 ARG, CRO, 39, yellow, cro, 18 -2018, 6, 21, 18 ARG, CRO, 45, ht, 0, 0 -2018, 6, 21, 18 ARG, CRO, 51, yellow, arg, 2 -2018, 6, 21, 18 ARG, CRO, 53, goal, cro, 18 -2018, 6, 21, 18 ARG, CRO, 58, yellow, cro, 17 -2018, 6, 21, 18 ARG, CRO, 67, yellow, cro, 2 -2018, 6, 21, 18 ARG, CRO, 80, goal, cro, 10 -2018, 6, 21, 18 ARG, CRO, 85, yellow, arg, 17 -2018, 6, 21, 18 ARG, CRO, 87, yellow, arg, 8 -2018, 6, 21, 18 ARG, CRO, 91, goal, cro, 7 -2018, 6, 21, 18 ARG, CRO, 94, yellow, cro, 5 -2018, 6, 21, 18 ARG, CRO, 95, ft, 0, 0 - -2018, 6, 22, 12 BRA, CRC, 0, ko, 0, 0 -2018, 6, 22, 12 BRA, CRC, 45, ht, 0, 0 -2018, 6, 22, 12 BRA, CRC, 81, yellow, bra, 10 -2018, 6, 22, 12 BRA, CRC, 81, yellow, bra, 11 -2018, 6, 22, 12 BRA, CRC, 84, yellow, crc, 2 -2018, 6, 22, 12 BRA, CRC, 91, goal, bra, 11 -2018, 6, 22, 12 BRA, CRC, 97, goal, bra, 10 -2018, 6, 22, 12 BRA, CRC, 99, ft, 2, 0 - -2018, 6, 22, 15 NIG, ICE, 0, ko, 0, 0 -2018, 6, 22, 15 NIG, ICE, 44, yellow, nig, 2 -2018, 6, 22, 15 NIG, ICE, 45, ht, 0, 0 -2018, 6, 22, 15 NIG, ICE, 49, goal, nig, 7 -2018, 6, 22, 15 NIG, ICE, 75, goal, nig, 7 -2018, 6, 22, 15 NIG, ICE, 90, ft, 2, 0 - -2018, 6, 22, 18 SER, SWI, 0, ko, 0, 0 -2018, 6, 22, 18 SER, SWI, 5, goal, ser, 9 -2018, 6, 22, 18 SER, SWI, 33, yellow, ser, 20 -2018, 6, 22, 18 SER, SWI, 39, yellow, ser, 4 -2018, 6, 22, 18 SER, SWI, 47, yellow, ser, 21 -2018, 6, 22, 18 SER, SWI, 47, ht, 1, 0 -2018, 6, 22, 18 SER, SWI, 52, goal, swi, 10 -2018, 6, 22, 18 SER, SWI, 89, goal, swi, 23 -2018, 6, 22, 18 SER, SWI, 90, ft, 1, 2 +2018, 6, 20, 12, POR, MOR, 0, ko, 0, 0 +2018, 6, 20, 12, POR, MOR, 4, goal, por, 7 +2018, 6, 20, 12, POR, MOR, 40, yellow, mor, 5 +2018, 6, 20, 12, POR, MOR, 45, ht, 1, 0 +2018, 6, 20, 12, POR, MOR, 90, ft, 1, 0 + +2018, 6, 20, 15, URG, SAU, 0, ko, 0, 0 +2018, 6, 20, 15, URG, SAU, 23, goal, urg, 9 +2018, 6, 20, 15, URG, SAU, 45, ht, 1, 0 +2018, 6, 20, 15, URG, SAU, 90, ft, 1, 0 + +2018, 6, 20, 18, IRA, SPA, 0, ko, 0, 0 +2018, 6, 20, 18, IRA, SPA, 45, ht, 0, 0 +2018, 6, 20, 18, IRA, SPA, 54, goal, spa, 19 +2018, 6, 20, 18, IRA, SPA, 79, yellow, ira, 11 +2018, 6, 20, 18, IRA, SPA, 92, yellow, ira, 9 +2018, 6, 20, 18, IRA, SPA, 90, ft, 0, 0 + +2018, 6, 21, 12, DEN, AUS, 0, ko, 0, 0 +2018, 6, 21, 12, DEN, AUS, 7, goal, den, 10 +2018, 6, 21, 12, DEN, AUS, 37, yellow, den, 20 +2018, 6, 21, 12, DEN, AUS, 38, goal, aus, 15 +2018, 6, 21, 12, DEN, AUS, 45, ht, 1, 1 +2018, 6, 21, 12, DEN, AUS, 84, yellow, den, 23 +2018, 6, 21, 12, DEN, AUS, 90, ft, 1, 1 + +2018, 6, 21, 15, FRA, PER, 0, ko, 0, 0 +2018, 6, 21, 15, FRA, PER, 18, yellow, fra, 14 +2018, 6, 21, 15, FRA, PER, 23, yellow, per, 9 +2018, 6, 21, 15, FRA, PER, 34, goal, fra, 10 +2018, 6, 21, 15, FRA, PER, 45, ht, 1, 0 +2018, 6, 21, 15, FRA, PER, 81, yellow, per, 23 +2018, 6, 21, 15, FRA, PER, 86, yellow, fra, 6 +2018, 6, 21, 15, FRA, PER, 90, ft, 1, 0 + +2018, 6, 21, 18, ARG, CRO, 0, ko, 0, 0 +2018, 6, 21, 18, ARG, CRO, 39, yellow, cro, 18 +2018, 6, 21, 18, ARG, CRO, 45, ht, 0, 0 +2018, 6, 21, 18, ARG, CRO, 51, yellow, arg, 2 +2018, 6, 21, 18, ARG, CRO, 53, goal, cro, 18 +2018, 6, 21, 18, ARG, CRO, 58, yellow, cro, 17 +2018, 6, 21, 18, ARG, CRO, 67, yellow, cro, 2 +2018, 6, 21, 18, ARG, CRO, 80, goal, cro, 10 +2018, 6, 21, 18, ARG, CRO, 85, yellow, arg, 17 +2018, 6, 21, 18, ARG, CRO, 87, yellow, arg, 8 +2018, 6, 21, 18, ARG, CRO, 91, goal, cro, 7 +2018, 6, 21, 18, ARG, CRO, 94, yellow, cro, 5 +2018, 6, 21, 18, ARG, CRO, 95, ft, 0, 0 + +2018, 6, 22, 12, BRA, CRC, 0, ko, 0, 0 +2018, 6, 22, 12, BRA, CRC, 45, ht, 0, 0 +2018, 6, 22, 12, BRA, CRC, 81, yellow, bra, 10 +2018, 6, 22, 12, BRA, CRC, 81, yellow, bra, 11 +2018, 6, 22, 12, BRA, CRC, 84, yellow, crc, 2 +2018, 6, 22, 12, BRA, CRC, 91, goal, bra, 11 +2018, 6, 22, 12, BRA, CRC, 97, goal, bra, 10 +2018, 6, 22, 12, BRA, CRC, 99, ft, 2, 0 + +2018, 6, 22, 15, NIG, ICE, 0, ko, 0, 0 +2018, 6, 22, 15, NIG, ICE, 44, yellow, nig, 2 +2018, 6, 22, 15, NIG, ICE, 45, ht, 0, 0 +2018, 6, 22, 15, NIG, ICE, 49, goal, nig, 7 +2018, 6, 22, 15, NIG, ICE, 75, goal, nig, 7 +2018, 6, 22, 15, NIG, ICE, 90, ft, 2, 0 + +2018, 6, 22, 18, SER, SWI, 0, ko, 0, 0 +2018, 6, 22, 18, SER, SWI, 5, goal, ser, 9 +2018, 6, 22, 18, SER, SWI, 33, yellow, ser, 20 +2018, 6, 22, 18, SER, SWI, 39, yellow, ser, 4 +2018, 6, 22, 18, SER, SWI, 47, yellow, ser, 21 +2018, 6, 22, 18, SER, SWI, 47, ht, 1, 0 +2018, 6, 22, 18, SER, SWI, 52, goal, swi, 10 +2018, 6, 22, 18, SER, SWI, 89, goal, swi, 23 +2018, 6, 22, 18, SER, SWI, 90, ft, 1, 2 diff --git a/karmapi/wc.py b/karmapi/wc.py index c98aba6..673307a 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -239,26 +239,26 @@ def __init__(self, number): self.yellow = [] self.number = number -class Goal: - - def __init__(self, team, who=None, when=None, game=None, penalty=False): +class Event: + + def __init__(self, team, who=None, when=None, game=None): + self.team = team self.who = who self.when = when self.game = game - self.penalty = penalty + +class Goal(Event): + pass -class Penalty: + +class Penalty(Goal): """ Penalty in a shoot out which: which penalty: 1, 2, 3 etc """ - def __init__(self, team, who=None, which=None, when=None, - game=None, score=True): + def __init__(self, which=None, score=True): - self.who = who - self.when = when - self.game = game self.which = which self.score = True self.penalty = True @@ -688,7 +688,8 @@ class JeuxSansFrontieres: * get games for final stage """ - def __init__(self, groups, places=None, dates=None, now=None): + def __init__(self, groups, places=None, dates=None, + now=None, game_events=None): self.groups = groups # places and dates for knockout stage @@ -706,8 +707,24 @@ def __init__(self, groups, places=None, dates=None, now=None): self.seconds = {} self.events = curio.UniversalQueue() + self.game_events = game_events + - self.game_events = deque() + def dispatch_events(self): + """ Dispatch events to the appropriate game """ + + if not self.game_events: + return + + # build game lookup + gl = {} + for game in self.generate_games(): + gl[(game.when, game.a, game.b)] = game + + print('ggg', self.game_events) + for event in parse_events(self.game_events): + print(event) + async def load_group_games(self): @@ -724,8 +741,12 @@ async def load_group_games(self): await self.games.put(game) + self.dispatch_events() + self.its_a_knockout() + # need to dispatch knockout events around here some how. + for game in self.knockout: await self.games.put(game) @@ -1393,6 +1414,7 @@ def __init__(self, parent, jsf=None, venues=None, gallery='.', self.jsf = jsf self.jsf.dump = dump + self.jsf.game_events = events self.messages = [] @@ -1776,13 +1798,13 @@ def dump(game, out): if when < now: return - print(when.year, when.month, when.day, when.hour, sep=', ', end=' ', file=out) + print(when.year, when.month, when.day, when.hour, sep=', ', end=', ', file=out) print(game.a, game.b, 0, 'ko', 0, 0, sep=', ', file=out) - print(when.year, when.month, when.day, when.hour, sep=', ', end=' ', file=out) + print(when.year, when.month, when.day, when.hour, sep=', ', end=', ', file=out) print(game.a, game.b, 45, 'ht', 0, 0, sep=', ', file=out) - print(when.year, when.month, when.day, when.hour, sep=', ', end=' ', file=out) + print(when.year, when.month, when.day, when.hour, sep=', ', end=', ', file=out) print(game.a, game.b, 90, 'ft', 0, 0, sep=', ', file=out) def parse_events(events, out=None): @@ -1796,6 +1818,12 @@ def parse_events(events, out=None): row = [x.strip() for x in row] out.writerow(row) continue + + if not row: + continue + + if row[0].startswith('#'): + continue year, month, day, hour = [int(x) for x in row[:4]] @@ -1805,8 +1833,10 @@ def parse_events(events, out=None): what = row[7].strip().lower() extras = [x.strip().lower() for x in row[8:]] - # Need to find the game the event applies to - pass + when = datetime(year, month, day, hour, 0) + when += timedelta(minutes=minute) + + yield when, a.lower(), b.lower(), what, extras @@ -1850,8 +1880,8 @@ def shuffle_events(events, out=None): if args.events: args.events = open(args.events) - parse_events(args.events, args.outfile) - sys.exit() + #parse_events(args.events, args.outfile) + #sys.exit() farm.add(GuidoClock) From 835a9e6d6c7fb3f2842caefb9a0125e832b9af76 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 23 Jun 2018 11:16:22 -0400 Subject: [PATCH 346/642] working towards working goals and cards --- karmapi/wc.csv | 22 +++++++++++++++ karmapi/wc.py | 72 ++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 86 insertions(+), 8 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index 3edb4e2..3dc8e43 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -232,3 +232,25 @@ 2018, 6, 22, 18, SER, SWI, 52, goal, swi, 10 2018, 6, 22, 18, SER, SWI, 89, goal, swi, 23 2018, 6, 22, 18, SER, SWI, 90, ft, 1, 2 + +2018, 6, 23, 12, BEL, TUN, 0, ko, 0, 0 +2018, 6, 23, 12, BEL, TUN, 6, goal, bel, 10 +2018, 6, 23, 12, BEL, TUN, 14, yellow, tun, 14 +2018, 6, 23, 12, BEL, TUN, 16, goal, bel, 9 +2018, 6, 23, 12, BEL, TUN, 18, goal, tun, 11 +2018, 6, 23, 12, BEL, TUN, 48, goal, bel, 9 +2018, 6, 23, 12, BEL, TUN, 49, ht, 3, 1 +2018, 6, 23, 12, BEL, TUN, 51, goal, bel, 10 +2018, 6, 23, 12, BEL, TUN, 90, ft, 0, 0 + +2018, 6, 23, 15, SKO, MEX, 0, ko, 0, 0 +2018, 6, 23, 15, SKO, MEX, 45, ht, 0, 0 +2018, 6, 23, 15, SKO, MEX, 90, ft, 0, 0 + +2018, 6, 23, 18, GER, SWE, 0, ko, 0, 0 +2018, 6, 23, 18, GER, SWE, 45, ht, 0, 0 +2018, 6, 23, 18, GER, SWE, 90, ft, 0, 0 + +2018, 6, 24, 12, ENG, PAN, 0, ko, 0, 0 +2018, 6, 24, 12, ENG, PAN, 45, ht, 0, 0 +2018, 6, 24, 12, ENG, PAN, 90, ft, 0, 0 diff --git a/karmapi/wc.py b/karmapi/wc.py index 673307a..66b036f 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -241,15 +241,29 @@ def __init__(self, number): class Event: - def __init__(self, team, who=None, when=None, game=None): + def __init__(self, team, who=None, when=None, game=None, og=False): self.team = team self.who = who self.when = when self.game = game + self.og = og + self.start_evt = curio.Event() + + async def start(self): + + # curio events ?? + await curio.timeout_after(warp, self.start_evt) + + await self.run() class Goal(Event): - pass + + async def run(self): + + # this sort of seems weird + await self.game.goal(self) + class Penalty(Goal): @@ -257,12 +271,19 @@ class Penalty(Goal): which: which penalty: 1, 2, 3 etc """ - def __init__(self, which=None, score=True): + def __init__(self, team, who=None, when=None, game=None, og=False, + which=None, score=True): + super().__init___(team, **kwargs) + self.which = which self.score = True self.penalty = True + async def run(self): + + await self.game.penalty(self) + def warp(a, b, when): """ Interpolate between a and b based on time """ @@ -471,7 +492,7 @@ def penalty(self, team): which = len(self.apen) + len(self.bpen) if random() < 0.5: - pen = Penalty(team, score=True, which=which) + pen = Penalty(team, score=True, which=which, when=) if team is self.a: self.apen.append(pen) @@ -710,7 +731,7 @@ def __init__(self, groups, places=None, dates=None, self.game_events = game_events - def dispatch_events(self): + async def dispatch_events(self): """ Dispatch events to the appropriate game """ if not self.game_events: @@ -719,13 +740,45 @@ def dispatch_events(self): # build game lookup gl = {} for game in self.generate_games(): - gl[(game.when, game.a, game.b)] = game + gl[(game.when.date(), game.a.name, game.b.name)] = game print('ggg', self.game_events) + knockout = [] for event in parse_events(self.game_events): print(event) + when, ateam, bteam, what, extras = event + + key = when.date(), ateam, bteam + + game = gl.get(key) + + if not game: + knockout.append(game) + + # turn team names into teams + ateam = name2team(ateam) + bteam = name2team(bteam) + # got the game. now create an appropriate event + if what == 'goal': + team = name2team[extras[0]] + + who = int(extras[1]) + og = False + if who > 23: + og = True + who -= 100 + + event = Goal(team, who, when, game, og) + await curio.spawn(event.start) + else: + # just print out the event info + print('*****', when, ateam, bteam, what, extras) + + + # fixme do something with knockout + pass async def load_group_games(self): """ Put the group games into the game queue """ @@ -741,7 +794,7 @@ async def load_group_games(self): await self.games.put(game) - self.dispatch_events() + await self.dispatch_events() self.its_a_knockout() @@ -1853,7 +1906,10 @@ def shuffle_events(events, out=None): row = [x.strip() for x in row] writer.writerow(row) - +def name2team(name): + """ Convert string to team object """ + return globals()[name] + parser = argparse.ArgumentParser() parser.add_argument('--nopig', action='store_true') From 993b8b193044fcc7fb5f33e37231f605e3022ff7 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 23 Jun 2018 11:21:14 -0400 Subject: [PATCH 347/642] more events for wc --- karmapi/wc.csv | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index 3dc8e43..3081a3d 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -241,7 +241,9 @@ 2018, 6, 23, 12, BEL, TUN, 48, goal, bel, 9 2018, 6, 23, 12, BEL, TUN, 49, ht, 3, 1 2018, 6, 23, 12, BEL, TUN, 51, goal, bel, 10 -2018, 6, 23, 12, BEL, TUN, 90, ft, 0, 0 +2018, 6, 23, 12, BEL, TUN, 90, goal, bel, 21 +2018, 6, 23, 12, BEL, TUN, 93, goal, tun, 10 +2018, 6, 23, 12, BEL, TUN, 94, ft, 5, 2 2018, 6, 23, 15, SKO, MEX, 0, ko, 0, 0 2018, 6, 23, 15, SKO, MEX, 45, ht, 0, 0 From e1cb6dba17fe564c0c4e90784e364e74a80ad242 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 23 Jun 2018 17:24:31 -0400 Subject: [PATCH 348/642] stinging bat density increasing --- karmapi/wc.csv | 21 ++++++++-- karmapi/wc.py | 106 +++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 101 insertions(+), 26 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index 3081a3d..d472802 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -246,12 +246,25 @@ 2018, 6, 23, 12, BEL, TUN, 94, ft, 5, 2 2018, 6, 23, 15, SKO, MEX, 0, ko, 0, 0 -2018, 6, 23, 15, SKO, MEX, 45, ht, 0, 0 -2018, 6, 23, 15, SKO, MEX, 90, ft, 0, 0 +2018, 6, 23, 15, SKO, MEX, 25, goal, mex, 11 +2018, 6, 23, 15, SKO, MEX, 45, ht, 0, 1 +2018, 6, 23, 15, SKO, MEX, 58, yellow, sko, 19 +2018, 6, 23, 15, SKO, MEX, 63, yellow, sko, 2 +2018, 6, 23, 15, SKO, MEX, 66, goal, mex, 14 +2018, 6, 23, 15, SKO, MEX, 72, yellow, sko, 10 +2018, 6, 23, 15, SKO, MEX, 80, yellow, sko, 15 +2018, 6, 23, 15, SKO, MEX, 93, goal, sko, 7 +2018, 6, 23, 15, SKO, MEX, 96, ft, 1, 2 2018, 6, 23, 18, GER, SWE, 0, ko, 0, 0 -2018, 6, 23, 18, GER, SWE, 45, ht, 0, 0 -2018, 6, 23, 18, GER, SWE, 90, ft, 0, 0 +2018, 6, 23, 18, GER, SWE, 31, goal, swe, 20 +2018, 6, 23, 18, GER, SWE, 45, ht, 0, 1 +2018, 6, 23, 18, GER, SWE, 48, goal, ger, 11 +2018, 6, 23, 18, GER, SWE, 52, yellow, swe, 8 +2018, 6, 23, 18, GER, SWE, 71, yellow, ger, 17 +2018, 6, 23, 18, GER, SWE, 82, yellow, ger, 17 +2018, 6, 23, 18, GER, SWE, 94, goal, ger, 8 +2018, 6, 23, 18, GER, SWE, 95, ft, 2, 1 2018, 6, 24, 12, ENG, PAN, 0, ko, 0, 0 2018, 6, 24, 12, ENG, PAN, 45, ht, 0, 0 diff --git a/karmapi/wc.py b/karmapi/wc.py index 66b036f..80b7973 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -239,31 +239,64 @@ def __init__(self, number): self.yellow = [] self.number = number -class Event: +class GameEvent: - def __init__(self, team, who=None, when=None, game=None, og=False): + def __init__(self, when=None, game=None): - self.team = team - self.who = who self.when = when self.game = game - self.og = og self.start_evt = curio.Event() async def start(self): - # curio events ?? - await curio.timeout_after(warp, self.start_evt) + # want to wait appropriate time, for now just 1 + try: + await curio.timeout_after(1, self.start_evt.wait) + except curio.TaskTimeout: + print("time to run the event") await self.run() + + async def run(self): + + print(self.when, self.game) + -class Goal(Event): +class TeamEvent(GameEvent): + """ An event that involves one team in the game """ + + def __init__(self, team, who=None, when=None, game=None, og=False): + + super().__init__(when, game) + + self.team = team + self.who = who + self.when = when + self.game = game + self.og = og + +class Goal(TeamEvent): async def run(self): + print(self.team, self.when, self.who, self.game, self.og) # this sort of seems weird await self.game.goal(self) + +class Whistle(GameEvent): + async def run(self): + + self.game.end_event.set() + +class FullTime(GameEvent): + + async def run(self): + + print(self.when, self.game, 'FULL TIME') + await self.game.full_time() + + class Penalty(Goal): @@ -271,10 +304,9 @@ class Penalty(Goal): which: which penalty: 1, 2, 3 etc """ - def __init__(self, team, who=None, when=None, game=None, og=False, - which=None, score=True): + def __init__(self, team, which=None, score=True, **kwargs): - super().__init___(team, **kwargs) + super().__init__(team, **kwargs) self.which = which self.score = True @@ -320,16 +352,20 @@ def __init__(self, a, b, when, where=None, ascore=None, bscore=None): self.when = when self.where = where self.label = '' + + # ignore ascore/bscore, let events do the work + self.ascore = None + self.bscore = None - self.ascore = ascore - self.bscore = bscore self.apen = [] self.bpen = [] self.minute = 0 + self.end_event = curio.Event() + # flag if score was simulated - self.simulated = (ascore is None) or (bscore is None) + self.simulated = self.when > datetime.now() self.number = Game.NUMBER Game.NUMBER += 1 @@ -460,7 +496,13 @@ async def second_half(self): await self.half(minutes) async def full_time(self): - + + if self.is_group(): + self.end_event.set() + + elif self.ascore != self.bscore: + self.end_event.set() + await self.flash(fill='yellow', tag='FT') async def extra_time(self): @@ -492,7 +534,9 @@ def penalty(self, team): which = len(self.apen) + len(self.bpen) if random() < 0.5: - pen = Penalty(team, score=True, which=which, when=) + pen = Penalty(team, score=True, which=which, game=self, + when=self.when + timedelta(minutes=120 + which), + who = randint(1, 23)) if team is self.a: self.apen.append(pen) @@ -541,7 +585,15 @@ def all_over(self): return True async def goal(self, team, who=None, when=None): - pass + + if team is self.a: + self.ascore += 1 + else: + self.bscore += 1 + + minute = (when - self.when).minutes + await self.flash(" %dm" % minute, fill='green') + async def yellow(self, team, who=None, when=None): pass @@ -556,8 +608,10 @@ async def run(self, events): """ Run the game """ self.events = events - if self.ascore == None or self.bscore == None: + if self.simulated: await self.kick_off() + else: + await self.end_event.wait() a = self.a b = self.b @@ -740,17 +794,19 @@ async def dispatch_events(self): # build game lookup gl = {} for game in self.generate_games(): - gl[(game.when.date(), game.a.name, game.b.name)] = game + gl[(game.when.date(), game.a.name.lower(), game.b.name.lower())] = game print('ggg', self.game_events) knockout = [] + print(gl.keys()) for event in parse_events(self.game_events): - print(event) + print('xxx', event) when, ateam, bteam, what, extras = event key = when.date(), ateam, bteam game = gl.get(key) + print(key, game) if not game: knockout.append(game) @@ -761,7 +817,7 @@ async def dispatch_events(self): # got the game. now create an appropriate event if what == 'goal': - team = name2team[extras[0]] + team = name2team(extras[0]) who = int(extras[1]) og = False @@ -772,6 +828,12 @@ async def dispatch_events(self): event = Goal(team, who, when, game, og) await curio.spawn(event.start) + + elif what == 'ft': + + event = FullTime(when, game) + await curio.spawn(event.start) + else: # just print out the event info print('*****', when, ateam, bteam, what, extras) @@ -1889,7 +1951,7 @@ def parse_events(events, out=None): when = datetime(year, month, day, hour, 0) when += timedelta(minutes=minute) - yield when, a.lower(), b.lower(), what, extras + yield when, a.lower().strip(), b.lower().strip(), what, extras From 8f2edae2eb66c6703a9304c58cce5dd30b48b180 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 24 Jun 2018 11:35:50 -0400 Subject: [PATCH 349/642] events limping into life in wc --- karmapi/wc.csv | 26 +++++++++++++-- karmapi/wc.py | 87 +++++++++++++++++++++++++++++++++++++------------- 2 files changed, 88 insertions(+), 25 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index d472802..e62d945 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -267,5 +267,27 @@ 2018, 6, 23, 18, GER, SWE, 95, ft, 2, 1 2018, 6, 24, 12, ENG, PAN, 0, ko, 0, 0 -2018, 6, 24, 12, ENG, PAN, 45, ht, 0, 0 -2018, 6, 24, 12, ENG, PAN, 90, ft, 0, 0 +2018, 6, 24, 12, ENG, PAN, 8, goal, eng, 5 +2018, 6, 24, 12, ENG, PAN, 10, yellow, pan, 11 +2018, 6, 24, 12, ENG, PAN, 23, yellow, eng, 21 +2018, 6, 24, 12, ENG, PAN, 22, goal, eng, 9 +2018, 6, 24, 12, ENG, PAN, 36, goal, eng, 7 +2018, 6, 24, 12, ENG, PAN, 40, goal, eng, 5 +2018, 6, 24, 12, ENG, PAN, 45, yellow, pan, 4 +2018, 6, 24, 12, ENG, PAN, 46, goal, eng, 9 +2018, 6, 24, 12, ENG, PAN, 47, ht, 5, 0 +2018, 6, 24, 12, ENG, PAN, 62, goal, eng, 9 +2018, 6, 24, 12, ENG, PAN, 72, yellow, pan, 2 +2018, 6, 24, 12, ENG, PAN, 77, goal, pan, 23 +2018, 6, 24, 12, ENG, PAN, 90, ft, 6, 1 + + +2018, 6, 24, 15, JAP, SEN, 0, ko, 0, 0 +2018, 6, 24, 15, JAP, SEN, 11, goal, sen, 10 +2018, 6, 24, 15, JAP, SEN, 33, goal, sen, 14 +2018, 6, 24, 15, JAP, SEN, 45, ht, 0, 0 +2018, 6, 24, 15, JAP, SEN, 90, ft, 0, 0 + +2018, 6, 24, 18, POL, COL, 0, ko, 0, 0 +2018, 6, 24, 18, POL, COL, 45, ht, 0, 0 +2018, 6, 24, 18, POL, COL, 90, ft, 0, 0 diff --git a/karmapi/wc.py b/karmapi/wc.py index 80b7973..c9e1460 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -247,11 +247,11 @@ def __init__(self, when=None, game=None): self.game = game self.start_evt = curio.Event() - async def start(self): + async def start(self, delay): # want to wait appropriate time, for now just 1 try: - await curio.timeout_after(1, self.start_evt.wait) + await curio.timeout_after(delay, self.start_evt.wait) except curio.TaskTimeout: print("time to run the event") @@ -261,6 +261,11 @@ async def run(self): print(self.when, self.game) + + def __str__(self): + + return 'GAMEEVENT ' + str(self.when) + class TeamEvent(GameEvent): """ An event that involves one team in the game """ @@ -271,8 +276,6 @@ def __init__(self, team, who=None, when=None, game=None, og=False): self.team = team self.who = who - self.when = when - self.game = game self.og = og class Goal(TeamEvent): @@ -281,13 +284,29 @@ async def run(self): print(self.team, self.when, self.who, self.game, self.og) # this sort of seems weird - await self.game.goal(self) + await self.game.goal(self.team, self.who, self.when) + + +class KickOff(GameEvent): + + async def run(self): + + print(self.when, self.game, 'KICK OFF') + await self.game.kick_off() + +class FullTime(GameEvent): -class Whistle(GameEvent): - async def run(self): - self.game.end_event.set() + print(self.when, self.game, 'FULL TIME') + await self.game.full_time() + +class FullTime(GameEvent): + + async def run(self): + + print(self.when, self.game, 'FULL TIME') + await self.game.full_time() class FullTime(GameEvent): @@ -364,7 +383,7 @@ def __init__(self, a, b, when, where=None, ascore=None, bscore=None): self.end_event = curio.Event() - # flag if score was simulated + # flag if score was simulated - do this if game is in the future self.simulated = self.when > datetime.now() self.number = Game.NUMBER Game.NUMBER += 1 @@ -422,6 +441,9 @@ async def kick_off(self): """ Game has kicked off """ self.ascore = 0 self.bscore = 0 + + if not self.simulated: + return minutes = 45 + randint(0, 7) @@ -591,7 +613,10 @@ async def goal(self, team, who=None, when=None): else: self.bscore += 1 - minute = (when - self.when).minutes + if when is None: + sys.exit() + + minute = int((when - self.when).total_seconds() / 60) await self.flash(" %dm" % minute, fill='green') @@ -612,6 +637,7 @@ async def run(self, events): await self.kick_off() else: await self.end_event.wait() + print('GAME OVER!') a = self.a b = self.b @@ -773,7 +799,9 @@ def __init__(self, groups, places=None, dates=None, self.now = now or datetime(2018, 6, 14) self.start = self.now - self.step = timedelta(hours=1) + + # factor to warp time by + self.timewarp = 60 / (30 * 24 * 60 * 60) self.sleep = 0.01 self.games = curio.PriorityQueue() @@ -784,6 +812,13 @@ def __init__(self, groups, places=None, dates=None, self.events = curio.UniversalQueue() self.game_events = game_events + def warp(self, when): + """ convert when to a delay in seconds """ + start = self.start + seconds = (when - start).total_seconds() + + return seconds * self.timewarp + async def dispatch_events(self): """ Dispatch events to the appropriate game """ @@ -796,17 +831,13 @@ async def dispatch_events(self): for game in self.generate_games(): gl[(game.when.date(), game.a.name.lower(), game.b.name.lower())] = game - print('ggg', self.game_events) knockout = [] - print(gl.keys()) for event in parse_events(self.game_events): - print('xxx', event) when, ateam, bteam, what, extras = event key = when.date(), ateam, bteam game = gl.get(key) - print(key, game) if not game: knockout.append(game) @@ -824,15 +855,20 @@ async def dispatch_events(self): if who > 23: og = True who -= 100 - + event = Goal(team, who, when, game, og) - await curio.spawn(event.start) + await curio.spawn(event.start(self.warp(when))) + + elif what == 'ko': + + event = KickOff(when, game) + await curio.spawn(event.start(self.warp(when))) elif what == 'ft': event = FullTime(when, game) - await curio.spawn(event.start) + await curio.spawn(event.start(self.warp(when))) else: # just print out the event info @@ -1030,15 +1066,20 @@ async def run(self): print('load games') await self.reset() - if self.dump: - print(self.dump, dump) - for game in self.generate_games(): - #print(game) + for game in self.generate_games(): + + game.events = self.events + + if self.dump: dump(game, self.dump) + + if self.dump: self.dump.close() sys.exit(0) - + + + return print('loop forever?') #while not self.games.empty(): From 2d5d624c1e57f6ed749d974ae1044021236f5b5e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 24 Jun 2018 18:40:58 -0400 Subject: [PATCH 350/642] group stage events coming alive --- karmapi/wc.csv | 26 +++++++++++++------- karmapi/wc.py | 64 ++++++++++++++++++++++++++++++++------------------ 2 files changed, 58 insertions(+), 32 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index e62d945..9f170d4 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -8,6 +8,7 @@ 2018,6,14,15,rus,sau,94,goal,rus,11 2018,6,14,15,rus,sau,95,ft,5,0 +2018,6,15,14,egy,urg,0,ko,0,0 2018,6,15,14,egy,urg,89,goal,urg,2 2018,6,15,14,egy,urg,93,yellow,egy,5 2018,6,15,14,egy,urg,96,yellow,egy,6 @@ -150,13 +151,13 @@ 2018,6,19,18,RUS,EGY,0,ko,0,0 2018,6,19,18,RUS,EGY,45,ht,0,0 -2018,6,19,18,RUS,EGY, 46, rus, goal, 107 +2018,6,19,18,RUS,EGY, 46, goal, rus, 107 2018,6,19,18,RUS,EGY, 57, yellow, egy, 21 -2018,6,19,18,RUS,EGY, 59, rus, goal, 6 -2018,6,19,18,RUS,EGY, 62, rus, goal, 22 -2018,6,19,18,RUS,EGY, 73, egy, goal, 10 -2018,6,19,18,RUS,EGY, 84, rus, yellow, 10 -2018,6,19,18,RUS,EGY,90,ft,0,0 +2018,6,19,18,RUS,EGY, 59, goal, rus, 6 +2018,6,19,18,RUS,EGY, 62, goal, rus, 22 +2018,6,19,18,RUS,EGY, 73, goal, egy, 10 +2018,6,19,18,RUS,EGY, 84, yellow, rus, 10 +2018,6,19,18,RUS,EGY,90,ft,3,1 2018, 6, 20, 12, POR, MOR, 0, ko, 0, 0 2018, 6, 20, 12, POR, MOR, 4, goal, por, 7 @@ -285,9 +286,16 @@ 2018, 6, 24, 15, JAP, SEN, 0, ko, 0, 0 2018, 6, 24, 15, JAP, SEN, 11, goal, sen, 10 2018, 6, 24, 15, JAP, SEN, 33, goal, sen, 14 -2018, 6, 24, 15, JAP, SEN, 45, ht, 0, 0 +2018, 6, 24, 15, JAP, SEN, 45, ht, 1, 1 +2018, 6, 24, 15, JAP, SEN, 59, yellow, sen, 19 2018, 6, 24, 15, JAP, SEN, 90, ft, 0, 0 2018, 6, 24, 18, POL, COL, 0, ko, 0, 0 -2018, 6, 24, 18, POL, COL, 45, ht, 0, 0 -2018, 6, 24, 18, POL, COL, 90, ft, 0, 0 +2018, 6, 24, 18, POL, COL, 40, goal, col, 13 +2018, 6, 24, 18, POL, COL, 45, ht, 0, 1 +2018, 6, 24, 18, POL, COL, 61, yellow, pol, 5 +2018, 6, 24, 18, POL, COL, 70, goal, col, 9 +2018, 6, 24, 18, POL, COL, 75, goal, col, 11 +2018, 6, 24, 18, POL, COL, 85, yellow, pol, 6 +2018, 6, 24, 18, POL, COL, 96, ft, 0, 3 + diff --git a/karmapi/wc.py b/karmapi/wc.py index c9e1460..018f3f1 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -241,10 +241,11 @@ def __init__(self, number): class GameEvent: - def __init__(self, when=None, game=None): + def __init__(self, when=None, game=None, jsf=None): self.when = when self.game = game + self.jsf = jsf self.start_evt = curio.Event() async def start(self, delay): @@ -270,9 +271,9 @@ def __str__(self): class TeamEvent(GameEvent): """ An event that involves one team in the game """ - def __init__(self, team, who=None, when=None, game=None, og=False): + def __init__(self, team, who=None, when=None, game=None, og=False, **kwargs): - super().__init__(when, game) + super().__init__(when, game, **kwargs) self.team = team self.who = who @@ -313,7 +314,10 @@ class FullTime(GameEvent): async def run(self): print(self.when, self.game, 'FULL TIME') - await self.game.full_time() + done = await self.game.full_time() + + if done: + self.jsf.apres_match(self.game) @@ -519,14 +523,20 @@ async def second_half(self): async def full_time(self): + done = False if self.is_group(): - self.end_event.set() + done = True elif self.ascore != self.bscore: - self.end_event.set() + done = True + + if done: + await self.end_event.set() await self.flash(fill='yellow', tag='FT') + return done + async def extra_time(self): minutes = 15 + randint(0, 3) await self.half(minutes) @@ -639,6 +649,12 @@ async def run(self, events): await self.end_event.wait() print('GAME OVER!') + self.apres_match() + + await self.flash(tag='FT') + + def apres_match(self): + a = self.a b = self.b @@ -660,8 +676,6 @@ async def run(self, events): a.points += 1 b.points += 1 - await self.flash(tag='FT') - async def flash(self, tag='', fill='red'): a = self.a @@ -829,9 +843,11 @@ async def dispatch_events(self): # build game lookup gl = {} for game in self.generate_games(): + game.events = self.events gl[(game.when.date(), game.a.name.lower(), game.b.name.lower())] = game knockout = [] + etasks = [] for event in parse_events(self.game_events): when, ateam, bteam, what, extras = event @@ -856,24 +872,29 @@ async def dispatch_events(self): og = True who -= 100 - event = Goal(team, who, when, game, og) + event = Goal(team, who, when, game, og, jsf=self) - await curio.spawn(event.start(self.warp(when))) + task = await curio.spawn(event.start, self.warp(when)) + etasks.append(task) elif what == 'ko': - event = KickOff(when, game) - await curio.spawn(event.start(self.warp(when))) + event = KickOff(when, game, jsf=self) + task = await curio.spawn(event.start, self.warp(when)) + etasks.append(task) elif what == 'ft': - event = FullTime(when, game) - await curio.spawn(event.start(self.warp(when))) + event = FullTime(when, game, jsf=self) + task = await curio.spawn(event.start, self.warp(when)) + etasks.append(task) else: # just print out the event info print('*****', when, ateam, bteam, what, extras) + for task in etasks: + await task.join() # fixme do something with knockout pass @@ -892,9 +913,10 @@ async def load_group_games(self): await self.games.put(game) + self.its_a_knockout() + await self.dispatch_events() - self.its_a_knockout() # need to dispatch knockout events around here some how. @@ -983,6 +1005,8 @@ def generate_games(self): def apres_match(self, game): """ Deal with updating of knockout stage """ + game.apres_match() + if game.number == 63: print('third place:', game.winner()) return @@ -1066,19 +1090,13 @@ async def run(self): print('load games') await self.reset() - for game in self.generate_games(): - - game.events = self.events - - if self.dump: + if self.dump: + for game in self.generate_games(): dump(game, self.dump) - - if self.dump: self.dump.close() sys.exit(0) - return print('loop forever?') From 1bfab825433dbe4e72c4b4c90b11ac88875948f6 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 24 Jun 2018 21:38:37 -0400 Subject: [PATCH 351/642] simulator coming back together --- karmapi/wc.py | 96 ++++++++++++++++++--------------------------------- 1 file changed, 33 insertions(+), 63 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 018f3f1..b9ce100 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -254,7 +254,7 @@ async def start(self, delay): try: await curio.timeout_after(delay, self.start_evt.wait) except curio.TaskTimeout: - print("time to run the event") + pass await self.run() @@ -293,21 +293,14 @@ class KickOff(GameEvent): async def run(self): print(self.when, self.game, 'KICK OFF') - await self.game.kick_off() + await self.game.kick_off(self.jsf) -class FullTime(GameEvent): +class HalfTime(GameEvent): async def run(self): - print(self.when, self.game, 'FULL TIME') - await self.game.full_time() - -class FullTime(GameEvent): - - async def run(self): - - print(self.when, self.game, 'FULL TIME') - await self.game.full_time() + print(self.when, self.game, 'HALF TIME') + await self.game.half_time() class FullTime(GameEvent): @@ -318,6 +311,8 @@ async def run(self): if done: self.jsf.apres_match(self.game) + else: + print('NOT DONE???') @@ -389,6 +384,7 @@ def __init__(self, a, b, when, where=None, ascore=None, bscore=None): # flag if score was simulated - do this if game is in the future self.simulated = self.when > datetime.now() + print('SIMULATED', self.simulated) self.number = Game.NUMBER Game.NUMBER += 1 @@ -441,14 +437,15 @@ def __ge__(self, other): return (self.when, self.number) >= (other.when, other.number) - async def kick_off(self): + async def kick_off(self, jsf): """ Game has kicked off """ self.ascore = 0 self.bscore = 0 if not self.simulated: return - + + print('SIMULATING', self) minutes = 45 + randint(0, 7) await self.half(minutes) @@ -457,14 +454,12 @@ async def kick_off(self): await self.second_half() - await self.full_time() + done = await self.full_time() - if self.is_group(): - # maybe a good time to check if group is finished? - return self.ascore, self.bscore + ko = not self.is_group() # knockout match, are we done? - if self.ascore == self.bscore: + if ko and self.ascore == self.bscore: await self.extra_time() await self.extra_half_time() @@ -473,6 +468,8 @@ async def kick_off(self): if self.ascore == self.bscore: await self.penalties() + print('APRES!!!') + jsf.apres_match(self) def is_group(self): @@ -639,20 +636,6 @@ async def red(self, team, who=None, when=None): async def sub(self, team, off=None, on=None, when=None): pass - async def run(self, events): - """ Run the game """ - self.events = events - - if self.simulated: - await self.kick_off() - else: - await self.end_event.wait() - print('GAME OVER!') - - self.apres_match() - - await self.flash(tag='FT') - def apres_match(self): a = self.a @@ -815,10 +798,9 @@ def __init__(self, groups, places=None, dates=None, self.start = self.now # factor to warp time by - self.timewarp = 60 / (30 * 24 * 60 * 60) + self.timewarp = 10 / (30 * 24 * 60 * 60) self.sleep = 0.01 - self.games = curio.PriorityQueue() self.knockout = [] self.winners = {} self.seconds = {} @@ -901,6 +883,9 @@ async def dispatch_events(self): async def load_group_games(self): """ Put the group games into the game queue """ + + kos = [] + for label, group in self.groups.items(): group.name = label group.reset() @@ -911,17 +896,25 @@ async def load_group_games(self): game.a.games.append(game) game.b.games.append(game) - await self.games.put(game) + if game.simulated: + print('XXXXXXXX', game.when) + kos.append(KickOff(game.when, game, jsf=self)) self.its_a_knockout() await self.dispatch_events() - - # need to dispatch knockout events around here some how. - for game in self.knockout: - await self.games.put(game) + game.events = self.events + kos.append(KickOff(game.when, game, jsf=self)) + + kotasks = [] + for ko in kos: + task = await curio.spawn(ko.start, self.warp(ko.when)) + kotasks.append(task) + + for ko in kotasks: + await ko.join() def its_a_knockout(self): """ Set up knockout stage """ @@ -1063,9 +1056,6 @@ async def reset(self): self.winners = {} self.seconds = {} - while not self.games.empty(): - await self.games.get() - await self.load_group_games() async def run(self): @@ -1099,26 +1089,6 @@ async def run(self): return - print('loop forever?') - #while not self.games.empty(): - while True: - - game = await self.games.get() - - if game.when < self.now: - print(game.number) - print(self.now, game) - - # Run the game - await game.run(self.events) - - # post process game - self.apres_match(game) - - else: - await self.games.put(game) - - await curio.sleep(self.sleep) class Place: From 5e026b6e2defb4f78c34b2a849ea8deb69519ab8 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 25 Jun 2018 10:26:17 -0400 Subject: [PATCH 352/642] wc group game threes starting --- karmapi/wc.csv | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index 9f170d4..6b115ad 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -299,3 +299,21 @@ 2018, 6, 24, 18, POL, COL, 85, yellow, pol, 6 2018, 6, 24, 18, POL, COL, 96, ft, 0, 3 +2018, 6, 25, 14, URG, RUS, 0, ko, 0, 0 +2018, 6, 25, 14, URG, RUS, 9, yellow, urg, 8 +2018, 6, 25, 14, URG, RUS, 10, goal, urg, 9 +2018, 6, 25, 14, URG, RUS, 22, goal, urg, 10 +2018, 6, 25, 14, URG, RUS, 45, ht, 1, 0 +2018, 6, 25, 14, URG, RUS, 90, ft, 1, 0 + +2018, 6, 25, 14, SAU, EGY, 0, ko, 0, 0 +2018, 6, 25, 14, SAU, EGY, 45, ht, 0, 0 +2018, 6, 25, 14, SAU, EGY, 90, ft, 0, 0 + +2018, 6, 25, 18, IRA, POR, 0, ko, 0, 0 +2018, 6, 25, 18, IRA, POR, 45, ht, 0, 0 +2018, 6, 25, 18, IRA, POR, 90, ft, 0, 0 + +2018, 6, 25, 18, SPA, MOR, 0, ko, 0, 0 +2018, 6, 25, 18, SPA, MOR, 45, ht, 0, 0 +2018, 6, 25, 18, SPA, MOR, 90, ft, 0, 0 From 8af661896455403addb45cff0f0bb176cc967734 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 25 Jun 2018 10:35:11 -0400 Subject: [PATCH 353/642] data and code games played snafu --- karmapi/wc.csv | 20 ++++++++++---------- karmapi/wc.py | 5 +++-- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index 6b115ad..546de56 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -299,16 +299,16 @@ 2018, 6, 24, 18, POL, COL, 85, yellow, pol, 6 2018, 6, 24, 18, POL, COL, 96, ft, 0, 3 -2018, 6, 25, 14, URG, RUS, 0, ko, 0, 0 -2018, 6, 25, 14, URG, RUS, 9, yellow, urg, 8 -2018, 6, 25, 14, URG, RUS, 10, goal, urg, 9 -2018, 6, 25, 14, URG, RUS, 22, goal, urg, 10 -2018, 6, 25, 14, URG, RUS, 45, ht, 1, 0 -2018, 6, 25, 14, URG, RUS, 90, ft, 1, 0 - -2018, 6, 25, 14, SAU, EGY, 0, ko, 0, 0 -2018, 6, 25, 14, SAU, EGY, 45, ht, 0, 0 -2018, 6, 25, 14, SAU, EGY, 90, ft, 0, 0 +# 2018, 6, 25, 14, URG, RUS, 0, ko, 0, 0 +# 2018, 6, 25, 14, URG, RUS, 9, yellow, urg, 8 +# 2018, 6, 25, 14, URG, RUS, 10, goal, urg, 9 +# 2018, 6, 25, 14, URG, RUS, 22, goal, urg, 10 +# 2018, 6, 25, 14, URG, RUS, 45, ht, 1, 0 +# 2018, 6, 25, 14, URG, RUS, 90, ft, 1, 0 +# +# 2018, 6, 25, 14, SAU, EGY, 0, ko, 0, 0 +# 2018, 6, 25, 14, SAU, EGY, 45, ht, 0, 0 +# 2018, 6, 25, 14, SAU, EGY, 90, ft, 0, 0 2018, 6, 25, 18, IRA, POR, 0, ko, 0, 0 2018, 6, 25, 18, IRA, POR, 45, ht, 0, 0 diff --git a/karmapi/wc.py b/karmapi/wc.py index b9ce100..6e2a8d1 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -1007,12 +1007,13 @@ def apres_match(self, game): print('Winner:', game.winner()) return - game.a.played += 1 - game.b.played += 1 if game.is_group(): group = game.group group.played += 1 + + game.a.played += 1 + game.b.played += 1 key = game.label.lower() kgame, label = self.winners[key] From 06d4e4d7f2c0b37d8f33fc5a0343c36cc00d2123 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 25 Jun 2018 13:48:03 -0400 Subject: [PATCH 354/642] wc starting to be useful again, reset needs rethink? --- karmapi/wc.csv | 35 ++++++++++------- karmapi/wc.py | 101 +++++++++++++++++++++++++++++++------------------ 2 files changed, 86 insertions(+), 50 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index 546de56..347da49 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -29,11 +29,11 @@ 2018,6,15,18,por,spa,24,goal,spa,19 2018,6,15,18,por,spa,28,yellow,por,16 2018,6,15,18,por,spa,44,goal,por,7 -2018,6,15,18,por,spa,0,ht,2,1 +2018,6,15,18,por,spa,45,ht,2,1 2018,6,15,18,por,spa,55,goal,spa,19 2018,6,15,18,por,spa,58,goal,spa,4 2018,6,15,18,por,spa,88,goal,por,7 -2018,6,15,18,por,spa,0,ft,3,3 +2018,6,15,18,por,spa,90,ft,3,3 2018,6,16,10,fra,aus,0,ko,0,0 2018,6,13,10,fra,aus,13,yellow aus,7 @@ -73,7 +73,7 @@ 2018,6,17,12,CRC,SER,15,yellow,crc,15 2018,6,17,12,CRC,SER,45,ht,0,0 2018,6,17,12,CRC,SER,56,yellow,crc,20 -2018,6,17,12,CRC,SER,0,goal,ser,11 +2018,6,17,12,CRC,SER,56,goal,ser,11 2018,6,17,12,CRC,SER,59,yellow,ser,6 2018,6,17,12,CRC,SER,98,yellow,ser,8 2018,6,17,12,CRC,SER,98,ft,0,1 @@ -263,7 +263,7 @@ 2018, 6, 23, 18, GER, SWE, 48, goal, ger, 11 2018, 6, 23, 18, GER, SWE, 52, yellow, swe, 8 2018, 6, 23, 18, GER, SWE, 71, yellow, ger, 17 -2018, 6, 23, 18, GER, SWE, 82, yellow, ger, 17 +2018, 6, 23, 18, GER, SWE, 82, red, ger, 17 2018, 6, 23, 18, GER, SWE, 94, goal, ger, 8 2018, 6, 23, 18, GER, SWE, 95, ft, 2, 1 @@ -299,16 +299,23 @@ 2018, 6, 24, 18, POL, COL, 85, yellow, pol, 6 2018, 6, 24, 18, POL, COL, 96, ft, 0, 3 -# 2018, 6, 25, 14, URG, RUS, 0, ko, 0, 0 -# 2018, 6, 25, 14, URG, RUS, 9, yellow, urg, 8 -# 2018, 6, 25, 14, URG, RUS, 10, goal, urg, 9 -# 2018, 6, 25, 14, URG, RUS, 22, goal, urg, 10 -# 2018, 6, 25, 14, URG, RUS, 45, ht, 1, 0 -# 2018, 6, 25, 14, URG, RUS, 90, ft, 1, 0 -# -# 2018, 6, 25, 14, SAU, EGY, 0, ko, 0, 0 -# 2018, 6, 25, 14, SAU, EGY, 45, ht, 0, 0 -# 2018, 6, 25, 14, SAU, EGY, 90, ft, 0, 0 +2018, 6, 25, 14, URG, RUS, 0, ko, 0, 0 +2018, 6, 25, 14, URG, RUS, 9, yellow, urg, 8 +2018, 6, 25, 14, URG, RUS, 10, goal, urg, 9 +2018, 6, 25, 14, URG, RUS, 22, goal, urg, 10 +2018, 6, 25, 14, URG, RUS, 28, yellow, rus, 23 +2018, 6, 25, 14, URG, RUS, 35, red, rus, 23 +2018, 6, 25, 14, URG, RUS, 45, ht, 2, 0 +2018, 6, 25, 14, URG, RUS, 90, ft, 2, 0 + +2018, 6, 25, 14, SAU, EGY, 0, ko, 0, 0 +2018, 6, 25, 14, SAU, EGY, 22, goal, egy, 10 +2018, 6, 25, 14, SAU, EGY, 50, yellow, egy, 2 +2018, 6, 25, 14, SAU, EGY, 51, goal, sau, 7 +2018, 6, 25, 14, SAU, EGY, 53, ht, 0, 1 +2018, 6, 25, 14, SAU, EGY, 86, yellow, egy, 7 +2018, 6, 25, 14, SAU, EGY, 95, goal, sau, 18 +2018, 6, 25, 14, SAU, EGY, 96, ft, 2, 1 2018, 6, 25, 18, IRA, POR, 0, ko, 0, 0 2018, 6, 25, 18, IRA, POR, 45, ht, 0, 0 diff --git a/karmapi/wc.py b/karmapi/wc.py index 6e2a8d1..21a6ce7 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -396,7 +396,7 @@ def __hash__(self): def reset(self): """ Reset score if it was random """ if self.simulated: - self.ascore = self.bscore = None + self.ascore = self.bscore = 0 self.apen = [] self.bpen = [] @@ -405,13 +405,19 @@ def reset(self): def __str__(self): - return ( - str(self.label) + ' ' + - str(self.a.name) + ' v ' + - str(self.b.name) + ' ' + - self.day_name() + ' ' + - str(self.when) + ' ' + - str(self.where)) + msg = ' '. join(( + str(self.label), + str(self.a.name), + 'v', + str(self.b.name), + self.day_name(), + str(self.when), + str(self.where))) + + if self.ascore is not None: + msg += ' ' + '-'.join((str(self.ascore), str(self.bscore))) + + return msg def day_name(self): @@ -439,6 +445,7 @@ def __ge__(self, other): async def kick_off(self, jsf): """ Game has kicked off """ + print('wtf ko', self) self.ascore = 0 self.bscore = 0 @@ -615,14 +622,16 @@ def all_over(self): async def goal(self, team, who=None, when=None): + if self.ascore is None: + print('wtf', self, who, when, team) + + print('zzzz', team, self.a.name, self.b.name, self.ascore, self.bscore) + if team is self.a: self.ascore += 1 else: self.bscore += 1 - if when is None: - sys.exit() - minute = int((when - self.when).total_seconds() / 60) await self.flash(" %dm" % minute, fill='green') @@ -640,7 +649,7 @@ def apres_match(self): a = self.a b = self.b - + a.goals += self.ascore b.goals += self.bscore @@ -787,18 +796,20 @@ class JeuxSansFrontieres: """ def __init__(self, groups, places=None, dates=None, - now=None, game_events=None): + when=None, game_events=None): self.groups = groups # places and dates for knockout stage self.places = places self.dates = dates - self.now = now or datetime(2018, 6, 14) - self.start = self.now + self.when = when or datetime(2018, 6, 14) + self.start = self.when + + self.start_time = datetime.now() # factor to warp time by - self.timewarp = 10 / (30 * 24 * 60 * 60) + self.timewarp = 120 / (30 * 24 * 60 * 60) self.sleep = 0.01 self.knockout = [] @@ -809,11 +820,21 @@ def __init__(self, groups, places=None, dates=None, self.game_events = game_events def warp(self, when): - """ convert when to a delay in seconds """ + """ convert when to a delay in seconds """ start = self.start seconds = (when - start).total_seconds() - return seconds * self.timewarp + # how far are we in? + elapsed = (datetime.now() - self.start_time).total_seconds() + + print('WARP', when, seconds, elapsed) + + warp = (seconds * self.timewarp) - elapsed + return warp + + def iwarp(self, ticks): + """ convert tick time to a datetime """ + return self.start + timedelta(seconds=ticks / self.timewarp) async def dispatch_events(self): @@ -845,6 +866,8 @@ async def dispatch_events(self): bteam = name2team(bteam) # got the game. now create an appropriate event + delay = self.warp(when) + print('wtf', when, delay, what, self) if what == 'goal': team = name2team(extras[0]) @@ -856,19 +879,18 @@ async def dispatch_events(self): event = Goal(team, who, when, game, og, jsf=self) - task = await curio.spawn(event.start, self.warp(when)) + task = await curio.spawn(event.start, delay) etasks.append(task) elif what == 'ko': - event = KickOff(when, game, jsf=self) - task = await curio.spawn(event.start, self.warp(when)) + task = await curio.spawn(event.start, delay) etasks.append(task) elif what == 'ft': event = FullTime(when, game, jsf=self) - task = await curio.spawn(event.start, self.warp(when)) + task = await curio.spawn(event.start, delay) etasks.append(task) else: @@ -1077,8 +1099,6 @@ async def run(self): Generate events. """ print('jsf: run start') - print(self.now) - print('load games') await self.reset() if self.dump: @@ -1563,7 +1583,7 @@ def __init__(self, parent, jsf=None, venues=None, gallery='.', self.messages = [] - self.when = datetime(2018, 6, 14) + self.start_time = datetime.now() self.delta_t = 1. # teleprinter location @@ -1658,7 +1678,7 @@ def latlon2xy(self, place): return xx, yy - def step_balls(self): + async def step_balls(self): """ do something here """ #print('mexican wave step_balls') for place in self.places: @@ -1673,7 +1693,7 @@ def step_balls(self): locations = defaultdict(list) for team in jsf.generate_teams(): - team.where(self.when) + team.where(self.what_time_is_it()) xx, yy = self.latlon2xy(team) locations[(xx, yy)].append(team) @@ -1702,10 +1722,18 @@ def step_balls(self): self.show_tables() self.show_knockout() - - self.when += timedelta(hours=self.delta_t) + + def what_time_is_it(self): + + elapsed = (datetime.now() - self.start_time).total_seconds() + + elapsed /= self.jsf.timewarp + + return self.start_time + timedelta(seconds=elapsed) + + def draw(self): import time @@ -1716,7 +1744,7 @@ def draw(self): async def reset(self): """ Reset timer """ - self.when = datetime(2018, 6, 14) + self.start_time = datetime.now() self.messages = [] self.teleprints =[] @@ -1749,7 +1777,7 @@ def show_score_flashes(self): for info in reversed(self.messages): when = info['when'] - if self.when < when + timedelta(hours=48): + if self.what_time_is_it() < when + timedelta(hours=48): pos = self.layout(**info) if pos in keep: continue @@ -1926,13 +1954,14 @@ async def run(self): self.beanstalk.image = image self.draw() - - self.step_balls() - self.jsf.now = self.when + # step balls + await self.step_balls() + + #self.jsf.now = self.when() - #print('sleeping', self.sleep) - await curio.sleep(0) + # wait for event here. We want to repaint in a minute game time + await curio.sleep(self.sleep) def dump(game, out): From 6e1c7135a566626513f35839b3690a6b925aea90 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 25 Jun 2018 14:05:47 -0400 Subject: [PATCH 355/642] view and events in sync, reset rethink pending --- karmapi/wc.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/karmapi/wc.py b/karmapi/wc.py index 21a6ce7..0f33f15 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -1693,7 +1693,9 @@ async def step_balls(self): locations = defaultdict(list) for team in jsf.generate_teams(): - team.where(self.what_time_is_it()) + + wtit = self.what_time_is_it() + team.where(wtit) xx, yy = self.latlon2xy(team) locations[(xx, yy)].append(team) @@ -1724,15 +1726,12 @@ async def step_balls(self): self.show_knockout() - def what_time_is_it(self): elapsed = (datetime.now() - self.start_time).total_seconds() - elapsed /= self.jsf.timewarp + return self.jsf.iwarp(elapsed) - return self.start_time + timedelta(seconds=elapsed) - def draw(self): @@ -1861,6 +1860,10 @@ def show_groups(self): yy += 0.025 + def show_teams(self): + + pass + def show_games(self): From a9bbf32651a325f2f277456d00ec224dfdfd4fc1 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 25 Jun 2018 14:33:36 -0400 Subject: [PATCH 356/642] some older beginnings in docs --- docs/jhunter.rst | 34 ++++++++++++++++++++++++++++++++++ docs/johnny.rst | 5 +++++ docs/nodice/hrmm.rst | 4 ++++ 3 files changed, 43 insertions(+) create mode 100644 docs/jhunter.rst create mode 100644 docs/johnny.rst diff --git a/docs/jhunter.rst b/docs/jhunter.rst new file mode 100644 index 0000000..e75aee0 --- /dev/null +++ b/docs/jhunter.rst @@ -0,0 +1,34 @@ +See the world flicker through the months as it warms and is bathed in sunlight. + +This is an animation based on 40 years of climate reanalysis data. + +The goal here is to fit models to this data and use these models to help provide better forecasts for future natural catastrophes. + +In particular, hidden markov models will be fitted to the data to capture correlations in hazards across the globe and with luck reveal underlying quasi -periodic drivers that modulate the climate. + +Karma Pi is a personal project where I explore data visualisation and simulation of all sorts. + +From simulating the inners of black holes through the world's climate and even the FIFA soccer world club common themes emerge. + +Nested spheres of data are at the core of much that is here. + +Credits: European Centre for Medium Range Weather Forecasting for data. +https://www.ecmwf.int/ + +dsjfdla jdskafh dsakfj dksjafl dsabdf jsafl jdsak fjdksalf djka fjdksa fjdka fjdka fdjwasl fdkjsa fdksa fdkla fdjksajdflasfj dsalf jdkasl fdjsla fdklas fdjks dfjsalfdsafl afldsaf dslaf dsakfl da fjdsajlfdj sal + +:: + + python3.6 -m karmapi.ncdf --save . + +Press 'p', 'j' + +Let it run for a while. + +You should have a bunch of png's in the folder where you ran this. + +To create a gif: + +:: + + convert -delay 20 -loop 0 2018/6/8/*.png world.gif diff --git a/docs/johnny.rst b/docs/johnny.rst new file mode 100644 index 0000000..5592179 --- /dev/null +++ b/docs/johnny.rst @@ -0,0 +1,5 @@ +============= + Johnny Gill +============= + +??? diff --git a/docs/nodice/hrmm.rst b/docs/nodice/hrmm.rst index d419f0a..cca2cf7 100644 --- a/docs/nodice/hrmm.rst +++ b/docs/nodice/hrmm.rst @@ -53,3 +53,7 @@ Data Information =========== + +1, (2 (3, 4, 5)) 6 7 + +A From a755a9c498f197db5f11ff34cdb050c075c33f5a Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 25 Jun 2018 14:40:27 -0400 Subject: [PATCH 357/642] world cup release 0.9.3.0 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 39259b1..c3da72c 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from codecs import open from os import path -__version__ = '0.9.2.0' +__version__ = '0.9.3.0' here = path.abspath(path.dirname(__file__)) From 9599022c65faf01c7ed5dd40dee8a31f5525bb28 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 25 Jun 2018 15:26:31 -0400 Subject: [PATCH 358/642] inevitable wc time zone fix utcnow for now --- karmapi/wc.csv | 8 ++++++++ karmapi/wc.py | 32 +++++++++++++++++++++----------- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index 347da49..95fffcb 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -318,9 +318,17 @@ 2018, 6, 25, 14, SAU, EGY, 96, ft, 2, 1 2018, 6, 25, 18, IRA, POR, 0, ko, 0, 0 +2018, 6, 25, 18, IRA, POR, 33, yellow, por, 5 +2018, 6, 25, 18, IRA, POR, 44, goal, por, 20 2018, 6, 25, 18, IRA, POR, 45, ht, 0, 0 2018, 6, 25, 18, IRA, POR, 90, ft, 0, 0 2018, 6, 25, 18, SPA, MOR, 0, ko, 0, 0 +2018, 6, 25, 18, SPA, MOR, 14, goal, mor, 13 +2018, 6, 25, 18, SPA, MOR, 19, goal, spa, 22 +2018, 6, 25, 18, SPA, MOR, 21, yellow, mor, 8 +2018, 6, 25, 18, SPA, MOR, 29, yellow, mor, 16 +2018, 6, 25, 18, SPA, MOR, 31, yellow, mor, 4 +2018, 6, 25, 18, SPA, MOR, 31, yellow, mor, 14 2018, 6, 25, 18, SPA, MOR, 45, ht, 0, 0 2018, 6, 25, 18, SPA, MOR, 90, ft, 0, 0 diff --git a/karmapi/wc.py b/karmapi/wc.py index 0f33f15..ead57ba 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -260,7 +260,7 @@ async def start(self, delay): async def run(self): - print(self.when, self.game) + print('ruunning: ', self.when, self.game) def __str__(self): @@ -383,8 +383,11 @@ def __init__(self, a, b, when, where=None, ascore=None, bscore=None): self.end_event = curio.Event() # flag if score was simulated - do this if game is in the future - self.simulated = self.when > datetime.now() - print('SIMULATED', self.simulated) + self.simulated = self.when > datetime.utcnow() + if self.simulated: + print('SIMULATED', self.simulated, self) + + # this has to go away.. self.number = Game.NUMBER Game.NUMBER += 1 @@ -405,11 +408,18 @@ def reset(self): def __str__(self): + aname = bname = '---' + if self.a: + aname = self.a.name + + if self.b: + bname= self.b.name + msg = ' '. join(( str(self.label), - str(self.a.name), + aname, 'v', - str(self.b.name), + bname, self.day_name(), str(self.when), str(self.where))) @@ -806,7 +816,7 @@ def __init__(self, groups, places=None, dates=None, self.when = when or datetime(2018, 6, 14) self.start = self.when - self.start_time = datetime.now() + self.start_time = datetime.utcnow() # factor to warp time by self.timewarp = 120 / (30 * 24 * 60 * 60) @@ -825,7 +835,7 @@ def warp(self, when): seconds = (when - start).total_seconds() # how far are we in? - elapsed = (datetime.now() - self.start_time).total_seconds() + elapsed = (datetime.utcnow() - self.start_time).total_seconds() print('WARP', when, seconds, elapsed) @@ -1583,7 +1593,7 @@ def __init__(self, parent, jsf=None, venues=None, gallery='.', self.messages = [] - self.start_time = datetime.now() + self.start_time = datetime.utcnow() self.delta_t = 1. # teleprinter location @@ -1728,7 +1738,7 @@ async def step_balls(self): def what_time_is_it(self): - elapsed = (datetime.now() - self.start_time).total_seconds() + elapsed = (datetime.utcnow() - self.start_time).total_seconds() return self.jsf.iwarp(elapsed) @@ -1743,7 +1753,7 @@ def draw(self): async def reset(self): """ Reset timer """ - self.start_time = datetime.now() + self.start_time = datetime.utcnow() self.messages = [] self.teleprints =[] @@ -1968,7 +1978,7 @@ async def run(self): def dump(game, out): - now = datetime.now() + now = datetime.utcnow() print('dumping') when = game.when From 27e69ac960c1efde21febb993ae585fb08936267 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 25 Jun 2018 19:22:19 -0400 Subject: [PATCH 359/642] working towards a wc reset --- karmapi/wc.csv | 15 ++++++++++++--- karmapi/wc.py | 35 +++++++++++++++++++++++++++-------- setup.py | 2 +- 3 files changed, 40 insertions(+), 12 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index 95fffcb..89bf0e5 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -320,8 +320,13 @@ 2018, 6, 25, 18, IRA, POR, 0, ko, 0, 0 2018, 6, 25, 18, IRA, POR, 33, yellow, por, 5 2018, 6, 25, 18, IRA, POR, 44, goal, por, 20 -2018, 6, 25, 18, IRA, POR, 45, ht, 0, 0 -2018, 6, 25, 18, IRA, POR, 90, ft, 0, 0 +2018, 6, 25, 18, IRA, POR, 45, ht, 0, 1 +2018, 6, 25, 18, IRA, POR, 52, yellow, ira, 3 +2018, 6, 25, 18, IRA, POR, 54, yellow, ira, 20 +2018, 6, 25, 18, IRA, POR, 64, yellow, por, 20 +2018, 6, 25, 18, IRA, POR, 83, yellow, por, 7 +2018, 6, 25, 18, IRA, POR, 92, goal, ira, 10 +2018, 6, 25, 18, IRA, POR, 96, ft, 1, 1 2018, 6, 25, 18, SPA, MOR, 0, ko, 0, 0 2018, 6, 25, 18, SPA, MOR, 14, goal, mor, 13 @@ -331,4 +336,8 @@ 2018, 6, 25, 18, SPA, MOR, 31, yellow, mor, 4 2018, 6, 25, 18, SPA, MOR, 31, yellow, mor, 14 2018, 6, 25, 18, SPA, MOR, 45, ht, 0, 0 -2018, 6, 25, 18, SPA, MOR, 90, ft, 0, 0 +2018, 6, 25, 18, SPA, MOR, 81, goal, mor, 19 +2018, 6, 25, 18, SPA, MOR, 89, yellow, mor, 12 +2018, 6, 25, 18, SPA, MOR, 91, goal, spa, 17 +2018, 6, 25, 18, SPA, MOR, 94, yellow, mor, 2 +2018, 6, 25, 18, SPA, MOR, 97, ft, 2, 2 diff --git a/karmapi/wc.py b/karmapi/wc.py index ead57ba..8d9f8b5 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -248,9 +248,10 @@ def __init__(self, when=None, game=None, jsf=None): self.jsf = jsf self.start_evt = curio.Event() - async def start(self, delay): + async def start(self): # want to wait appropriate time, for now just 1 + delay = self.jsf.warp(self.when) try: await curio.timeout_after(delay, self.start_evt.wait) except curio.TaskTimeout: @@ -267,6 +268,19 @@ def __str__(self): return 'GAMEEVENT ' + str(self.when) +class CheckPoint(GameEvent): + + async def run(self): + + print('check point: ', self.when, self.game) + + await self.jsf.check_point() + + def __str__(self): + + return 'CHECK POINT ' + str(self.when) + + class TeamEvent(GameEvent): """ An event that involves one team in the game """ @@ -876,8 +890,6 @@ async def dispatch_events(self): bteam = name2team(bteam) # got the game. now create an appropriate event - delay = self.warp(when) - print('wtf', when, delay, what, self) if what == 'goal': team = name2team(extras[0]) @@ -889,18 +901,18 @@ async def dispatch_events(self): event = Goal(team, who, when, game, og, jsf=self) - task = await curio.spawn(event.start, delay) + task = await curio.spawn(event.start) etasks.append(task) elif what == 'ko': event = KickOff(when, game, jsf=self) - task = await curio.spawn(event.start, delay) + task = await curio.spawn(event.start) etasks.append(task) elif what == 'ft': event = FullTime(when, game, jsf=self) - task = await curio.spawn(event.start, delay) + task = await curio.spawn(event.start) etasks.append(task) else: @@ -936,18 +948,25 @@ async def load_group_games(self): await self.dispatch_events() + # create an event for now, to trigger checkpoint for reset + cp = CheckPoint(when=datetime.utcnow(), jsf=self) + cptask = curio.spawn(cp.start) + for game in self.knockout: game.events = self.events kos.append(KickOff(game.when, game, jsf=self)) kotasks = [] for ko in kos: - task = await curio.spawn(ko.start, self.warp(ko.when)) + task = await curio.spawn(ko.start) kotasks.append(task) for ko in kotasks: await ko.join() + await cp.join() + + def its_a_knockout(self): """ Set up knockout stage """ self.knockout = [] @@ -1597,7 +1616,7 @@ def __init__(self, parent, jsf=None, venues=None, gallery='.', self.delta_t = 1. # teleprinter location - self.teleprint_xxyy = .8, .025 + self.teleprint_xxyy = .85, .425 self.teleprints = [] self.scan_venues(venues) diff --git a/setup.py b/setup.py index c3da72c..bf1cd49 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from codecs import open from os import path -__version__ = '0.9.3.0' +__version__ = '0.9.3.1' here = path.abspath(path.dirname(__file__)) From be7e95d4a279ff7ae651bbe7550d8304863adee6 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 27 Jun 2018 11:11:06 -0400 Subject: [PATCH 360/642] yesterday wc events --- karmapi/wc.csv | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index 89bf0e5..e46d16b 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -55,7 +55,7 @@ 2018,6,16,14,PER,DEN,0,ko,0,0 2018,6,16,14,PER,DEN,38,yellow,per,13 2018,6,16,14,PER,DEN,45,ht,0,0 -2018,6,16,14,PER,DEN,58,goal,per,20 +2018,6,16,14,PER,DEN,58,goal,den,20 2018,6,16,14,PER,DEN,86,yellow,den,8 2018,6,16,14,PER,DEN,93,yellow,den,20 2018,6,16,14,PER,DEN,94,ft,0,1 @@ -341,3 +341,43 @@ 2018, 6, 25, 18, SPA, MOR, 91, goal, spa, 17 2018, 6, 25, 18, SPA, MOR, 94, yellow, mor, 2 2018, 6, 25, 18, SPA, MOR, 97, ft, 2, 2 + +2018, 6, 26, 14, DEN, FRA, 0, ko, 0, 0 +2018, 6, 26, 14, DEN, FRA, 48, yellow, den, 13 +2018, 6, 26, 14, DEN, FRA, 49, ht, 0, 0 +2018, 6, 26, 14, DEN, FRA, 90, ft, 0, 0 + +2018, 6, 26, 14, AUS, PER, 0, ko, 0, 0 +2018, 6, 26, 14, AUS, PER, 10, yellow, aus, 15 +2018, 6, 26, 14, AUS, PER, 18, goal, per, 18 +2018, 6, 26, 14, AUS, PER, 44, yellow, per, 19 +2018, 6, 26, 14, AUS, PER, 45, ht, 0, 1 +2018, 6, 26, 14, AUS, PER, 50, goal, per, 9 +2018, 6, 26, 14, AUS, PER, 60, yellow, aus, 17 +2018, 6, 26, 14, AUS, PER, 66, yellow, aus, 23 +2018, 6, 26, 14, AUS, PER, 79, yellow, per, 7 +2018, 6, 26, 14, AUS, PER, 88, yellow, aus, 5 +2018, 6, 26, 14, AUS, PER, 95, ft, 0, 2 + +2018, 6, 26, 18, NIG, ARG, 0, ko, 0, 0 +2018, 6, 26, 18, NIG, ARG, 14, goal, arg, 10 +2018, 6, 26, 18, NIG, ARG, 32, yellow, nig, 6 +2018, 6, 26, 18, NIG, ARG, 45, ht, 0, 1 +2018, 6, 26, 18, NIG, ARG, 49, yellow, arg, 14 +2018, 6, 26, 18, NIG, ARG, 51, goal, nig, 11 +2018, 6, 26, 18, NIG, ARG, 64, yellow, arg, 7 +2018, 6, 26, 18, NIG, ARG, 86, goal, arg, 16 +2018, 6, 26, 18, NIG, ARG, 32, yellow, nig, 10 +2018, 6, 26, 18, NIG, ARG, 90, ft, 1, 2 + +2018, 6, 26, 18, ICE, CRO, 0, ko, 0, 0 +2018, 6, 26, 18, ICE, CRO, 14, yellow, cro, 20 +2018, 6, 26, 18, ICE, CRO, 45, ht, 0, 0 +2018, 6, 26, 18, ICE, CRO, 53, goal, cro, 19 +2018, 6, 26, 18, ICE, CRO, 59, yellow, ice, 20 +2018, 6, 26, 18, ICE, CRO, 64, yellow, ice, 11 +2018, 6, 26, 18, ICE, CRO, 76, goal, ice, 10 +2018, 6, 26, 18, ICE, CRO, 84, yellow, ice, 2 +2018, 6, 26, 18, ICE, CRO, 90, goal, cro, 4 +2018, 6, 26, 18, ICE, CRO, 92, ft, 1, 2 + From fb966a05555fa9d443c6dd2acca4bbd772717c59 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 27 Jun 2018 11:16:25 -0400 Subject: [PATCH 361/642] today events for wc --- karmapi/wc.csv | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index e46d16b..5432189 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -381,3 +381,38 @@ 2018, 6, 26, 18, ICE, CRO, 90, goal, cro, 4 2018, 6, 26, 18, ICE, CRO, 92, ft, 1, 2 + +2018, 6, 27, 14, SKO, GER, 0, ko, 0, 0 +2018, 6, 27, 14, SKO, GER, 0, yellow, sko, 17 +2018, 6, 27, 14, SKO, GER, 0, yellow, sko, 15 +2018, 6, 27, 14, SKO, GER, 0, yellow, sko, 18 +2018, 6, 27, 14, SKO, GER, 45, ht, 0, 0 +2018, 6, 27, 14, SKO, GER, 90, ft, 0, 0 + +2018, 6, 27, 14, MEX, SWE, 0, ko, 0, 0 +2018, 6, 27, 14, MEX, SWE, 1, yellow, mex, 23 +2018, 6, 27, 14, MEX, SWE, 26, yellow, swe, 7 +2018, 6, 27, 14, MEX, SWE, 45, ht, 0, 0 +2018, 6, 27, 14, MEX, SWE, 50, goal, swe, 6 +2018, 6, 27, 14, MEX, SWE, 90, ft, 0, 0 + +2018, 6, 27, 18, SER, BRA, 0, ko, 0, 0 +2018, 6, 27, 18, SER, BRA, 45, ht, 0, 0 +2018, 6, 27, 18, SER, BRA, 90, ft, 0, 0 +2018, 6, 27, 18, SWI, CRC, 0, ko, 0, 0 +2018, 6, 27, 18, SWI, CRC, 45, ht, 0, 0 +2018, 6, 27, 18, SWI, CRC, 90, ft, 0, 0 + +2018, 6, 28, 14, JAP, POL, 0, ko, 0, 0 +2018, 6, 28, 14, JAP, POL, 45, ht, 0, 0 +2018, 6, 28, 14, JAP, POL, 90, ft, 0, 0 +2018, 6, 28, 14, SEN, COL, 0, ko, 0, 0 +2018, 6, 28, 14, SEN, COL, 45, ht, 0, 0 +2018, 6, 28, 14, SEN, COL, 90, ft, 0, 0 + +2018, 6, 28, 18, ENG, BEL, 0, ko, 0, 0 +2018, 6, 28, 18, ENG, BEL, 45, ht, 0, 0 +2018, 6, 28, 18, ENG, BEL, 90, ft, 0, 0 +2018, 6, 28, 18, PAN, TUN, 0, ko, 0, 0 +2018, 6, 28, 18, PAN, TUN, 45, ht, 0, 0 +2018, 6, 28, 18, PAN, TUN, 90, ft, 0, 0 From fb9e04993a01948f7829234af34344ab5101c077 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 27 Jun 2018 12:21:55 -0400 Subject: [PATCH 362/642] wc germany out update --- karmapi/wc.csv | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index 5432189..f324876 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -383,18 +383,26 @@ 2018, 6, 27, 14, SKO, GER, 0, ko, 0, 0 -2018, 6, 27, 14, SKO, GER, 0, yellow, sko, 17 -2018, 6, 27, 14, SKO, GER, 0, yellow, sko, 15 -2018, 6, 27, 14, SKO, GER, 0, yellow, sko, 18 +2018, 6, 27, 14, SKO, GER, 9, yellow, sko, 15 +2018, 6, 27, 14, SKO, GER, 23, yellow, sko, 17 2018, 6, 27, 14, SKO, GER, 45, ht, 0, 0 -2018, 6, 27, 14, SKO, GER, 90, ft, 0, 0 +2018, 6, 27, 14, SKO, GER, 48, yellow, sko, 18 +2018, 6, 27, 14, SKO, GER, 65, yellow, sko, 7 +2018, 6, 27, 14, SKO, GER, 92, goal, sko, 19 +2018, 6, 27, 14, SKO, GER, 96, goal, sko, 7 +2018, 6, 27, 14, SKO, GER,100, ft, 0, 2 2018, 6, 27, 14, MEX, SWE, 0, ko, 0, 0 2018, 6, 27, 14, MEX, SWE, 1, yellow, mex, 23 2018, 6, 27, 14, MEX, SWE, 26, yellow, swe, 7 2018, 6, 27, 14, MEX, SWE, 45, ht, 0, 0 2018, 6, 27, 14, MEX, SWE, 50, goal, swe, 6 -2018, 6, 27, 14, MEX, SWE, 90, ft, 0, 0 +2018, 6, 27, 14, MEX, SWE, 59, yellow, mex, 15 +2018, 6, 27, 14, MEX, SWE, 61, goal, swe, 4 +2018, 6, 27, 14, MEX, SWE, 74, goal, swe, 121 +2018, 6, 27, 14, MEX, SWE, 85, yellow, mex, 7 +2018, 6, 27, 14, MEX, SWE, 88, yellow, swe, 2 +2018, 6, 27, 14, MEX, SWE, 95, ft, 0, 3 2018, 6, 27, 18, SER, BRA, 0, ko, 0, 0 2018, 6, 27, 18, SER, BRA, 45, ht, 0, 0 From 418cc572686640213d90ae7436053003031e2a2e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 27 Jun 2018 16:09:52 -0400 Subject: [PATCH 363/642] brazil and swiss move on --- karmapi/wc.csv | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index f324876..1a2aae1 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -405,11 +405,27 @@ 2018, 6, 27, 14, MEX, SWE, 95, ft, 0, 3 2018, 6, 27, 18, SER, BRA, 0, ko, 0, 0 +2018, 6, 27, 18, SER, BRA, 33, yellow, ser, 22 +2018, 6, 27, 18, SER, BRA, 36, goal, bra, 15 2018, 6, 27, 18, SER, BRA, 45, ht, 0, 0 +2018, 6, 27, 18, SER, BRA, 48, yellow, ser, 21 +2018, 6, 27, 18, SER, BRA, 68, goal, bra, 2 +2018, 6, 27, 18, SER, BRA, 70, yellow, ser, 9 2018, 6, 27, 18, SER, BRA, 90, ft, 0, 0 + 2018, 6, 27, 18, SWI, CRC, 0, ko, 0, 0 -2018, 6, 27, 18, SWI, CRC, 45, ht, 0, 0 -2018, 6, 27, 18, SWI, CRC, 90, ft, 0, 0 +2018, 6, 27, 18, SWI, CRC, 11, yellow, crc, 16 +2018, 6, 27, 18, SWI, CRC, 29, yellow, crc, 12 +2018, 6, 27, 18, SWI, CRC, 31, goal, swi, 15 +2018, 6, 27, 18, SWI, CRC, 37, yellow, swi, 2 +2018, 6, 27, 18, SWI, CRC, 45, ht, 1, 0 +2018, 6, 27, 18, SWI, CRC, 56, goal, crc, 19 +2018, 6, 27, 18, SWI, CRC, 75, yellow, swi, 17 +2018, 6, 27, 18, SWI, CRC, 83, yellow, swi, 22 +2018, 6, 27, 18, SWI, CRC, 88, goal, swi, 19 +2018, 6, 27, 18, SWI, CRC, 89, yellow, crc, 19 +2018, 6, 27, 18, SWI, CRC, 93, goal, crc, 101 +2018, 6, 27, 18, SWI, CRC, 94, ft, 2, 2 2018, 6, 28, 14, JAP, POL, 0, ko, 0, 0 2018, 6, 28, 14, JAP, POL, 45, ht, 0, 0 From cfdd1411efa16a3af6c094b9da3b7bbac5314fe4 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 27 Jun 2018 18:48:50 -0400 Subject: [PATCH 364/642] remove events in the near future --- karmapi/wc.csv | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index 1a2aae1..05abee5 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -427,16 +427,3 @@ 2018, 6, 27, 18, SWI, CRC, 93, goal, crc, 101 2018, 6, 27, 18, SWI, CRC, 94, ft, 2, 2 -2018, 6, 28, 14, JAP, POL, 0, ko, 0, 0 -2018, 6, 28, 14, JAP, POL, 45, ht, 0, 0 -2018, 6, 28, 14, JAP, POL, 90, ft, 0, 0 -2018, 6, 28, 14, SEN, COL, 0, ko, 0, 0 -2018, 6, 28, 14, SEN, COL, 45, ht, 0, 0 -2018, 6, 28, 14, SEN, COL, 90, ft, 0, 0 - -2018, 6, 28, 18, ENG, BEL, 0, ko, 0, 0 -2018, 6, 28, 18, ENG, BEL, 45, ht, 0, 0 -2018, 6, 28, 18, ENG, BEL, 90, ft, 0, 0 -2018, 6, 28, 18, PAN, TUN, 0, ko, 0, 0 -2018, 6, 28, 18, PAN, TUN, 45, ht, 0, 0 -2018, 6, 28, 18, PAN, TUN, 90, ft, 0, 0 From e600eb805130af162203b11aa5cacd1f4184aa32 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 28 Jun 2018 16:17:17 -0400 Subject: [PATCH 365/642] end of group state yellow cars and reset --- karmapi/wc.csv | 30 ++++++++++++++++++++++ karmapi/wc.py | 67 ++++++++++++++++++++++++++++++++++---------------- 2 files changed, 76 insertions(+), 21 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index 05abee5..d5174be 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -427,3 +427,33 @@ 2018, 6, 27, 18, SWI, CRC, 93, goal, crc, 101 2018, 6, 27, 18, SWI, CRC, 94, ft, 2, 2 +2018, 6, 28, 14, JAP, POL, 0, ko, 0, 0 +2018, 6, 28, 14, JAP, POL, 45, ht, 0, 0 +2018, 6, 28, 14, JAP, POL, 59, goal, pol, 5 +2018, 6, 28, 14, JAP, POL, 66, yellow, jap, 20 +2018, 6, 28, 14, JAP, POL, 90, ft, 0, 0 + +2018, 6, 28, 14, SEN, COL, 0, ko, 0, 0 +2018, 6, 28, 14, SEN, COL, 44, yellow, col, 17 +2018, 6, 28, 14, SEN, COL, 45, ht, 0, 0 +2018, 6, 28, 14, SEN, COL, 51, yellow, sen, 19 +2018, 6, 28, 14, SEN, COL, 74, goal, col, 13 +2018, 6, 28, 14, SEN, COL, 90, ft, 0, 0 + +2018, 6, 28, 18, ENG, BEL, 0, ko, 0, 0 +2018, 6, 28, 18, ENG, BEL, 19, yellow, bel, 17 +2018, 6, 28, 18, ENG, BEL, 33, yellow, bel, 23 +2018, 6, 28, 18, ENG, BEL, 45, ht, 0, 0 +2018, 6, 28, 18, ENG, BEL, 51, goal, bel, 18 +2018, 6, 28, 18, ENG, BEL, 90, ft, 0, 1 + +2018, 6, 28, 18, PAN, TUN, 0, ko, 0, 0 +2018, 6, 28, 18, PAN, TUN, 33, goal, pan, 104 +2018, 6, 28, 18, PAN, TUN, 44, yellow, tun, 13 +2018, 6, 28, 18, PAN, TUN, 45, ht, 1, 0 +2018, 6, 28, 18, PAN, TUN, 51, goal, tun, 8 +2018, 6, 28, 18, PAN, TUN, 66, goal, tun, 10 +2018, 6, 28, 18, PAN, TUN, 71, yellow, tun, 9 +2018, 6, 28, 18, PAN, TUN, 80, yellow, tun, 6 +2018, 6, 28, 18, PAN, TUN, 90, ft, 1, 2 + diff --git a/karmapi/wc.py b/karmapi/wc.py index 8d9f8b5..7ae464c 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -165,7 +165,7 @@ def load_squad(self): for player in range(squadsize): self.squad[player] = Player(player + 1) - + def where(self, when): """ Where is the team? """ @@ -302,6 +302,15 @@ async def run(self): await self.game.goal(self.team, self.who, self.when) +class Yellow(TeamEvent): + + async def run(self): + + print(self.team, self.when, self.who, self.game, self.og) + # this sort of seems weird + await self.game.yellow(self.team, self.who, self.when) + + class KickOff(GameEvent): async def run(self): @@ -469,7 +478,6 @@ def __ge__(self, other): async def kick_off(self, jsf): """ Game has kicked off """ - print('wtf ko', self) self.ascore = 0 self.bscore = 0 @@ -646,11 +654,6 @@ def all_over(self): async def goal(self, team, who=None, when=None): - if self.ascore is None: - print('wtf', self, who, when, team) - - print('zzzz', team, self.a.name, self.b.name, self.ascore, self.bscore) - if team is self.a: self.ascore += 1 else: @@ -659,9 +662,17 @@ async def goal(self, team, who=None, when=None): minute = int((when - self.when).total_seconds() / 60) await self.flash(" %dm" % minute, fill='green') - + async def yellow(self, team, who=None, when=None): - pass + + if team is self.a: + self.a.yellow += 1 + else: + self.b.yellow += 1 + + minute = int((when - self.when).total_seconds() / 60) + await self.flash(" %dm" % minute, fill='purple') + async def red(self, team, who=None, when=None): pass @@ -692,7 +703,7 @@ def apres_match(self): a.points += 1 b.points += 1 - async def flash(self, tag='', fill='red'): + async def flash(self, tag='', fill='red', card=False): a = self.a b = self.b @@ -702,10 +713,9 @@ async def flash(self, tag='', fill='red'): msg = a.name + ' ' + str(ascore) + ' ' + str(bscore) + ' ' + b.name msg += ' ' + tag - print('flash', msg) when = self.when + timedelta(minutes=self.minute) await self.events.put(dict(where=self.where, msg=msg, yoff=-90, - when=when, fill=fill)) + when=when, fill=fill, card=card)) def winner(self): """ Return winning team """ @@ -841,8 +851,11 @@ def __init__(self, groups, places=None, dates=None, self.seconds = {} self.events = curio.UniversalQueue() - self.game_events = game_events + self.game_events = game_events or [] + + self.tasks = [] + def warp(self, when): """ convert when to a delay in seconds """ start = self.start @@ -875,7 +888,8 @@ async def dispatch_events(self): knockout = [] etasks = [] - for event in parse_events(self.game_events): + for event in self.game_events: + when, ateam, bteam, what, extras = event key = when.date(), ateam, bteam @@ -904,6 +918,12 @@ async def dispatch_events(self): task = await curio.spawn(event.start) etasks.append(task) + elif what == 'yellow': + event = Yellow(team, who, when, game, jsf=self) + task = await curio.spawn(event.start) + etasks.append(task) + + elif what == 'ko': event = KickOff(when, game, jsf=self) task = await curio.spawn(event.start) @@ -919,6 +939,7 @@ async def dispatch_events(self): # just print out the event info print('*****', when, ateam, bteam, what, extras) + self.tasks += etasks for task in etasks: await task.join() @@ -948,10 +969,6 @@ async def load_group_games(self): await self.dispatch_events() - # create an event for now, to trigger checkpoint for reset - cp = CheckPoint(when=datetime.utcnow(), jsf=self) - cptask = curio.spawn(cp.start) - for game in self.knockout: game.events = self.events kos.append(KickOff(game.when, game, jsf=self)) @@ -961,11 +978,11 @@ async def load_group_games(self): task = await curio.spawn(ko.start) kotasks.append(task) + self.tasks += kotasks + for ko in kotasks: await ko.join() - await cp.join() - def its_a_knockout(self): """ Set up knockout stage """ @@ -1101,7 +1118,11 @@ def apres_match(self, game): async def reset(self): """ Reset things to start again """ + for task in self.tasks: + await task.cancel() + self.now = self.start + self.start_time = datetime.utcnow() Game.NUMBER -= len(self.knockout) self.knockout = [] @@ -1608,6 +1629,10 @@ def __init__(self, parent, jsf=None, venues=None, gallery='.', self.jsf = jsf self.jsf.dump = dump + + if events: + events = list(parse_events(events)) + self.jsf.game_events = events self.messages = [] @@ -2018,7 +2043,7 @@ def parse_events(events, out=None): if out: out = csv.writer(out) - for row in csv.reader(events): + for ix, row in enumerate(csv.reader(events)): if out: row = [x.strip() for x in row] From 99087df4797a682f980d1aded998bde6745b1a39 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 30 Jun 2018 12:11:18 -0400 Subject: [PATCH 366/642] its a knock out, jeux sans frontieres --- karmapi/wc.csv | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index d5174be..fad2910 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -457,3 +457,22 @@ 2018, 6, 28, 18, PAN, TUN, 80, yellow, tun, 6 2018, 6, 28, 18, PAN, TUN, 90, ft, 1, 2 +2018, 6, 30, 14, fra, arg, 0, ko, 0, 0 +2018, 6, 30, 14, fra, arg, 11, yellow, arg, 16 +2018, 6, 30, 14, fra, arg, 13, goal, fra, 7 +2018, 6, 30, 14, fra, arg, 19, yellow, arg, 3 +2018, 6, 30, 14, fra, arg, 41, goal, arg, 11 +2018, 6, 30, 14, fra, arg, 45, ht, 1, 1 +2018, 6, 30, 14, fra, arg, 48, goal, arg, 2 +2018, 6, 30, 14, fra, arg, 57, goal, fra, 2 +2018, 6, 30, 14, fra, arg, 64, goal, fra, 10 +2018, 6, 30, 14, fra, arg, 43, yellow, arg, 14 +2018, 6, 30, 14, fra, arg, 50, yellow, arg, 7 +2018, 6, 30, 14, fra, arg, 68, goal, fra, 10 +2018, 6, 30, 14, fra, arg, 72, yellow, fra, 14 +2018, 6, 30, 14, fra, arg, 73, yellow, fra, 2 +2018, 6, 30, 14, fra, arg, 93, goal, arg, 19 +2018, 6, 30, 14, fra, arg, 93, yellow, arg, 17 +2018, 6, 30, 14, fra, arg, 93, yellow, fra, 9 + +2018, 6, 30, 14, fra, arg, 96, ft From e7b7112243da66632bc5986fa8f9b1fff876da66 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 30 Jun 2018 19:19:40 -0400 Subject: [PATCH 367/642] wc knock out bugs --- karmapi/wc.csv | 10 +++++++++- karmapi/wc.py | 4 ++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index fad2910..8383222 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -474,5 +474,13 @@ 2018, 6, 30, 14, fra, arg, 93, goal, arg, 19 2018, 6, 30, 14, fra, arg, 93, yellow, arg, 17 2018, 6, 30, 14, fra, arg, 93, yellow, fra, 9 - 2018, 6, 30, 14, fra, arg, 96, ft + +2018, 6, 30, 18, urg, por, 0, ko, 0, 0 +2018, 6, 30, 18, urg, por, 7, goal, urg, 21 +2018, 6, 30, 18, urg, por, 45, ht, 0, 0 +2018, 6, 30, 18, urg, por, 55, goal, por, 3 +2018, 6, 30, 18, urg, por, 62, goal, urg, 21 +2018, 6, 30, 18, urg, por, 93, yellow, por, 7 +2018, 6, 30, 18, urg, por, 97, ft, 2, 1 + diff --git a/karmapi/wc.py b/karmapi/wc.py index 7ae464c..adae134 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -843,7 +843,7 @@ def __init__(self, groups, places=None, dates=None, self.start_time = datetime.utcnow() # factor to warp time by - self.timewarp = 120 / (30 * 24 * 60 * 60) + self.timewarp = 10 / (30 * 24 * 60 * 60) self.sleep = 0.01 self.knockout = [] @@ -897,7 +897,7 @@ async def dispatch_events(self): game = gl.get(key) if not game: - knockout.append(game) + knockout.append(key) # turn team names into teams ateam = name2team(ateam) From 2f3058650468912faef9c658beb983f732464765 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 1 Jul 2018 18:21:55 -0400 Subject: [PATCH 368/642] penalty shootouts, more todo lists --- karmapi/wc.csv | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index 8383222..1364eb5 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -484,3 +484,38 @@ 2018, 6, 30, 18, urg, por, 93, yellow, por, 7 2018, 6, 30, 18, urg, por, 97, ft, 2, 1 +2018, 7, 1, 14, spa, rus, 0, ko, 0, 0 +2018, 7, 1, 14, spa, rus, 12, goal, spa, 104 +2018, 7, 1, 14, spa, rus, 41, goal, rus, 22 +2018, 7, 1, 14, spa, rus, 45, ht, 1, 1 +2018, 7, 1, 14, spa, rus, 40, yellow, spa, 3 +2018, 7, 1, 14, spa, rus, 54, yellow, rus, 3 +2018, 7, 1, 14, spa, rus, 71, yellow, rus, 11 +2018, 7, 1, 14, spa, rus, 120, penalty, spa, 6, 1 +2018, 7, 1, 14, spa, rus, 121, penalty, rus, 10, 1 +2018, 7, 1, 14, spa, rus, 122, penalty, spa, 3, 1 +2018, 7, 1, 14, spa, rus, 123, penalty, rus, 4, 1 +2018, 7, 1, 14, spa, rus, 124, penalty, spa, 8, 0 +2018, 7, 1, 14, spa, rus, 125, penalty, rus, 17, 1 +2018, 7, 1, 14, spa, rus, 126, penalty, spa, 15, 1 +2018, 7, 1, 14, spa, rus, 127, penalty, rus, 6, 1 +2018, 7, 1, 14, spa, rus, 128, penalty, spa, 17, 0 +2018, 7, 1, 14, spa, rus, 129, ft, 1.3, 1.4 + + +2018, 7, 1, 18, cro, den, 0, ko, 0, 0 +2018, 7, 1, 18, cro, den, 1, goal, den, 13 +2018, 7, 1, 18, cro, den, 4, goal, cro, 17 +2018, 7, 1, 18, cro, den, 45, ht, 1, 1 +2018, 7, 1, 18, cro, den, 115, yellow, den, 13 +2018, 7, 1, 18, cro, den, 120, penalty, den, 10, 0 +2018, 7, 1, 18, cro, den, 121, penalty, cro, 19, 0 +2018, 7, 1, 18, cro, den, 122, penalty, den, 4, 1 +2018, 7, 1, 18, cro, den, 123, penalty, cro, 9, 1 +2018, 7, 1, 18, cro, den, 124, penalty, den, 2, 1 +2018, 7, 1, 18, cro, den, 125, penalty, cro, 10, 1 +2018, 7, 1, 18, cro, den, 126, penalty, den, 19, 0 +2018, 7, 1, 18, cro, den, 127, penalty, cro, 22, 0 +2018, 7, 1, 18, cro, den, 128, penalty, den, 9, 0 +2018, 7, 1, 18, cro, den, 129, penalty, cro, 7, 1 +2018, 7, 1, 18, cro, den, 130, ft, 1.3, 1.2 From 5f9ba6e72e064fc38d05823186811c35f451c630 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 2 Jul 2018 21:30:47 -0400 Subject: [PATCH 369/642] bees advance as mj heads home --- karmapi/wc.csv | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index 1364eb5..8ca1801 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -519,3 +519,25 @@ 2018, 7, 1, 18, cro, den, 128, penalty, den, 9, 0 2018, 7, 1, 18, cro, den, 129, penalty, cro, 7, 1 2018, 7, 1, 18, cro, den, 130, ft, 1.3, 1.2 + +2018, 7, 2, 14, bra, mex, 0, ko, 0, 0 +2018, 7, 2, 14, bra, mex, 38, yellow, mex, 21 +2018, 7, 2, 14, bra, mex, 43, yellow, bra, 6 +2018, 7, 2, 14, bra, mex, 45, ht, 0, 0 +2018, 7, 2, 14, bra, mex, 50, goal, bra, 10 +2018, 7, 2, 14, bra, mex, 54, yellow, mex, 16 +2018, 7, 2, 14, bra, mex, 59, yellow, bra, 5 +2018, 7, 2, 14, bra, mex, 77, yellow, mex, 3 +2018, 7, 2, 14, bra, mex, 88, goal, bra, 20 +2018, 7, 2, 14, bra, mex, 92, yellow, mex, 18 +2018, 7, 2, 14, bra, mex, 97, ft, 2, 0 + +2018, 7, 2, 18, bel, jap, 0, ko, 0, 0 +2018, 7, 2, 18, bel, jap, 40, yellow, jap, 7 +2018, 7, 2, 18, bel, jap, 45, ht, 0, 0 +2018, 7, 2, 18, bel, jap, 47, goal, jap, 8 +2018, 7, 2, 18, bel, jap, 52, goal, jap, 14 +2018, 7, 2, 18, bel, jap, 69, goal, bel, 5 +2018, 7, 2, 18, bel, jap, 73, goal, bel, 8 +2018, 7, 2, 18, bel, jap, 92, goal, bel, 22 +2018, 7, 2, 18, bel, jap, 92, ft, 3, 2 From acb77afbc11e259011d87e7711b8b74de546fdbb Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 3 Jul 2018 11:57:57 -0400 Subject: [PATCH 370/642] knockout coming back to life --- karmapi/backends/tkpig.py | 4 ++ karmapi/pigfarm.py | 2 +- karmapi/wc.csv | 9 ++++ karmapi/wc.py | 86 +++++++++++++++++++++++++++------------ 4 files changed, 74 insertions(+), 27 deletions(-) diff --git a/karmapi/backends/tkpig.py b/karmapi/backends/tkpig.py index 442f0ad..389ed65 100644 --- a/karmapi/backends/tkpig.py +++ b/karmapi/backends/tkpig.py @@ -69,6 +69,10 @@ def setWindowTitle(self, title): def show(self): pass + def __str__(self): + + return str(self.__class__) + class Help: diff --git a/karmapi/pigfarm.py b/karmapi/pigfarm.py index a629010..04aa103 100644 --- a/karmapi/pigfarm.py +++ b/karmapi/pigfarm.py @@ -112,7 +112,7 @@ async def build(self): while True: meta, kwargs = await self.builds.get() - print('building piglet:', meta) + print('building piglet:', meta, kwargs) piglet = meta(self.toplevel(), **kwargs) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index 8ca1801..36d9a06 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -541,3 +541,12 @@ 2018, 7, 2, 18, bel, jap, 73, goal, bel, 8 2018, 7, 2, 18, bel, jap, 92, goal, bel, 22 2018, 7, 2, 18, bel, jap, 92, ft, 3, 2 + +2018, 7, 3, 14, swe, swi, 0, ko, 0, 0 +2018, 7, 3, 14, swe, swi, 31, yellow, swe, 2 +2018, 7, 3, 14, swe, swi, 45, ht, 0, 0 +2018, 7, 3, 14, swe, swi, 61, yellow, swi, 11 +2018, 7, 3, 14, swe, swi, 66, goal, swe, 10 +2018, 7, 3, 14, swe, swi, 68, yellow, swi, 10 +2018, 7, 3, 14, swe, swi, 94, red, swi, 6 +2018, 7, 3, 14, swe, swi, 96, ft, 1, 0 diff --git a/karmapi/wc.py b/karmapi/wc.py index adae134..2409b54 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -874,30 +874,54 @@ def iwarp(self, ticks): return self.start + timedelta(seconds=ticks / self.timewarp) - async def dispatch_events(self): - """ Dispatch events to the appropriate game """ + def match_game(self, key): + + when, ateam, bteam = key - if not self.game_events: - return - # build game lookup gl = {} for game in self.generate_games(): game.events = self.events - gl[(game.when.date(), game.a.name.lower(), game.b.name.lower())] = game + aname = bname = '-' + if game.a: + aname = game.a.name.lower() + bname = game.b.name.lower() + + gkey = (game.when, aname, bname) + #print(game, gkey) + if gkey in gl: + raise ValueError("Duplicate game key %s" % str(key)) + gl[gkey] = game + + # Now find the game for this key + game = gl.get(key) + + if game is None: + game = gl.get((key[0], '-','-')) + + return game + + + async def dispatch_events(self): + """ Dispatch events to the appropriate game """ + + if not self.game_events: + return + knockout = [] etasks = [] for event in self.game_events: - when, ateam, bteam, what, extras = event + kotime, when, ateam, bteam, what, extras = event - key = when.date(), ateam, bteam + key = kotime, ateam, bteam - game = gl.get(key) + game = self.match_game(key) if not game: - knockout.append(key) + knockout.append((key, event)) + continue # turn team names into teams ateam = name2team(ateam) @@ -905,20 +929,13 @@ async def dispatch_events(self): # got the game. now create an appropriate event if what == 'goal': - team = name2team(extras[0]) - - who = int(extras[1]) - og = False - if who > 23: - og = True - who -= 100 - + team, who, og = whodunnit(extras) event = Goal(team, who, when, game, og, jsf=self) - task = await curio.spawn(event.start) etasks.append(task) elif what == 'yellow': + team, who, og = whodunnit(extras) event = Yellow(team, who, when, game, jsf=self) task = await curio.spawn(event.start) etasks.append(task) @@ -1059,9 +1076,11 @@ def generate_games(self): for game in team.games: games.add(game) + games.update(self.knockout) + for game in sorted(games): yield game - + def apres_match(self, game): """ Deal with updating of knockout stage """ @@ -1092,9 +1111,9 @@ def apres_match(self, game): kgame, label = self.seconds[key] steam = group.second() - setattr(kgame, label, group.second()) + setattr(kgame, label, steam) if group.is_finished(): - steam.games.append(game) + steam.games.append(kgame) for team in group.teams: if team not in (wteam, steam): @@ -1104,7 +1123,9 @@ def apres_match(self, game): else: kgame, label = self.winners[game.number] wteam = game.winner() - setattr(kgame, label, game.winner()) + + print('knockout winner:', wteam, game) + setattr(kgame, label, wteam) wteam.games.append(kgame) if game.number in self.seconds: @@ -2064,10 +2085,10 @@ def parse_events(events, out=None): what = row[7].strip().lower() extras = [x.strip().lower() for x in row[8:]] - when = datetime(year, month, day, hour, 0) - when += timedelta(minutes=minute) + kotime = datetime(year, month, day, hour, 0) + when = kotime + timedelta(minutes=minute) - yield when, a.lower().strip(), b.lower().strip(), what, extras + yield kotime, when, a.lower().strip(), b.lower().strip(), what, extras @@ -2089,6 +2110,19 @@ def name2team(name): return globals()[name] +def whodunnit(extras): + + team = name2team(extras[0]) + + who = int(extras[1]) + og = False + if who > 23: + og = True + who -= 100 + + return team, who, og + + parser = argparse.ArgumentParser() parser.add_argument('--nopig', action='store_true') parser.add_argument('--gallery') From d69d093b92b1a323b9349429b6d08bdb28b6dd13 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 3 Jul 2018 17:08:00 -0400 Subject: [PATCH 371/642] england win penalty shootout edition --- karmapi/wc.csv | 38 +++++++++++--- karmapi/wc.py | 133 +++++++++++++++++++++++-------------------------- 2 files changed, 94 insertions(+), 77 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index 36d9a06..817b614 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -8,11 +8,11 @@ 2018,6,14,15,rus,sau,94,goal,rus,11 2018,6,14,15,rus,sau,95,ft,5,0 -2018,6,15,14,egy,urg,0,ko,0,0 -2018,6,15,14,egy,urg,89,goal,urg,2 -2018,6,15,14,egy,urg,93,yellow,egy,5 -2018,6,15,14,egy,urg,96,yellow,egy,6 -2018,6,15,14,egy,urg,96,ft,1,0 +2018,6,15,12,egy,urg,0,ko,0,0 +2018,6,15,12,egy,urg,89,goal,urg,2 +2018,6,15,12,egy,urg,93,yellow,egy,5 +2018,6,15,12,egy,urg,96,yellow,egy,6 +2018,6,15,12,egy,urg,96,ft,1,0 2018,6,15,15,mor,ira,0,ko,0,0 2018,6,15,15,mor,ira,10,yellow,ira,7 @@ -285,10 +285,16 @@ 2018, 6, 24, 15, JAP, SEN, 0, ko, 0, 0 2018, 6, 24, 15, JAP, SEN, 11, goal, sen, 10 -2018, 6, 24, 15, JAP, SEN, 33, goal, sen, 14 +2018, 6, 24, 15, JAP, SEN, 33, goal, jap, 14 2018, 6, 24, 15, JAP, SEN, 45, ht, 1, 1 2018, 6, 24, 15, JAP, SEN, 59, yellow, sen, 19 -2018, 6, 24, 15, JAP, SEN, 90, ft, 0, 0 +2018, 6, 24, 15, JAP, SEN, 68, yellow, jap, 14 +2018, 6, 24, 15, JAP, SEN, 71, goal, sen, 22 +2018, 6, 24, 15, JAP, SEN, 78, goal, jap, 4 +2018, 6, 24, 15, JAP, SEN, 90, yellow, sen, 12 +2018, 6, 24, 15, JAP, SEN, 91, yellow, sen, 11 +2018, 6, 24, 15, JAP, SEN, 94, yellow, jap, 17 +2018, 6, 24, 15, JAP, SEN, 95, ft, 2, 2 2018, 6, 24, 18, POL, COL, 0, ko, 0, 0 2018, 6, 24, 18, POL, COL, 40, goal, col, 13 @@ -550,3 +556,21 @@ 2018, 7, 3, 14, swe, swi, 68, yellow, swi, 10 2018, 7, 3, 14, swe, swi, 94, red, swi, 6 2018, 7, 3, 14, swe, swi, 96, ft, 1, 0 + +2018, 7, 3, 18, col, eng, 0, ko, 0, 0 +2018, 7, 3, 18, col, eng, 41, yellow, col, 5 +2018, 7, 3, 18, col, eng, 45, ht, 0, 0 +2018, 7, 3, 18, col, eng, 57, goal, eng, 9 +2018, 7, 3, 18, col, eng, 93, goal, col, 13 + +2018, 7, 3, 18, col, eng, 120, penalty, col, 9, 1 +2018, 7, 3, 18, col, eng, 121, penalty, eng, 9, 1 +2018, 7, 3, 18, col, eng, 122, penalty, col, 7, 1 +2018, 7, 3, 18, col, eng, 123, penalty, eng, 10, 1 +2018, 7, 3, 18, col, eng, 124, penalty, col, 14, 1 +2018, 7, 3, 18, col, eng, 125, penalty, eng, 8, 0 +2018, 7, 3, 18, col, eng, 126, penalty, col, 15, 0 +2018, 7, 3, 18, col, eng, 127, penalty, eng, 12, 1 +2018, 7, 3, 18, col, eng, 128, penalty, col, 7, 0 +2018, 7, 3, 18, col, eng, 127, penalty, eng, 4, 1 +2018, 7, 3, 18, col, eng, 130, ft, 1, 1 diff --git a/karmapi/wc.py b/karmapi/wc.py index 2409b54..d2f31f7 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -297,7 +297,7 @@ class Goal(TeamEvent): async def run(self): - print(self.team, self.when, self.who, self.game, self.og) + print('goal', self.team, self.when, self.who, self.game, self.og) # this sort of seems weird await self.game.goal(self.team, self.who, self.when) @@ -306,7 +306,7 @@ class Yellow(TeamEvent): async def run(self): - print(self.team, self.when, self.who, self.game, self.og) + print('yellow', self.team, self.when, self.who, self.game, self.og) # this sort of seems weird await self.game.yellow(self.team, self.who, self.when) @@ -315,7 +315,7 @@ class KickOff(GameEvent): async def run(self): - print(self.when, self.game, 'KICK OFF') + print('ko', self.when, self.game, 'KICK OFF') await self.game.kick_off(self.jsf) class HalfTime(GameEvent): @@ -330,13 +330,9 @@ class FullTime(GameEvent): async def run(self): print(self.when, self.game, 'FULL TIME') - done = await self.game.full_time() - - if done: - self.jsf.apres_match(self.game) - else: - print('NOT DONE???') + await self.game.full_time() + self.jsf.apres_match(self.game) @@ -345,12 +341,13 @@ class Penalty(Goal): which: which penalty: 1, 2, 3 etc """ - def __init__(self, team, which=None, score=True, **kwargs): + def __init__(self, team, who=None, when=None, game=None, score=False, **kwargs): + + super().__init__(team, who=who, when=when, game=game, **kwargs) - super().__init__(team, **kwargs) + print('PEN', self.when, team, score) - self.which = which - self.score = True + self.score = score self.penalty = True async def run(self): @@ -403,8 +400,6 @@ def __init__(self, a, b, when, where=None, ascore=None, bscore=None): self.minute = 0 - self.end_event = curio.Event() - # flag if score was simulated - do this if game is in the future self.simulated = self.when > datetime.utcnow() if self.simulated: @@ -421,13 +416,12 @@ def __hash__(self): def reset(self): """ Reset score if it was random """ - if self.simulated: - self.ascore = self.bscore = 0 + self.ascore = self.bscore = 0 - self.apen = [] - self.bpen = [] + self.apen = [] + self.bpen = [] - self.minute = 0 + self.minute = 0 def __str__(self): @@ -478,13 +472,13 @@ def __ge__(self, other): async def kick_off(self, jsf): """ Game has kicked off """ - self.ascore = 0 - self.bscore = 0 + self.reset() if not self.simulated: return print('SIMULATING', self) + minutes = 45 + randint(0, 7) await self.half(minutes) @@ -493,7 +487,7 @@ async def kick_off(self, jsf): await self.second_half() - done = await self.full_time() + await self.full_time() ko = not self.is_group() @@ -559,20 +553,8 @@ async def second_half(self): async def full_time(self): - done = False - if self.is_group(): - done = True - - elif self.ascore != self.bscore: - done = True - - if done: - await self.end_event.set() - await self.flash(fill='yellow', tag='FT') - return done - async def extra_time(self): minutes = 15 + randint(0, 3) await self.half(minutes) @@ -594,15 +576,15 @@ async def penalties(self): total = 0 done = False while not done: - done = self.penalty(first) + done = self._penalty(first) first, second = second, first - def penalty(self, team): - """ Take a penalty """ + def _penalty(self, team): + """ Simulate a penalty """ which = len(self.apen) + len(self.bpen) if random() < 0.5: - pen = Penalty(team, score=True, which=which, game=self, + pen = Penalty(team, score=True, game=self, when=self.when + timedelta(minutes=120 + which), who = randint(1, 23)) @@ -613,6 +595,13 @@ def penalty(self, team): return self.all_over() + async def penalty(self, pen): + + if pen.team is self.a: + self.apen.append(pen) + else: + self.bpen.append(pen) + def pens_score(self): """ score in penalties """ apens = [x for x in self.apen if x.score] @@ -709,6 +698,10 @@ async def flash(self, tag='', fill='red', card=False): b = self.b ascore = self.ascore bscore = self.bscore + if self.apen: + aa, bb = self.pens_score() + ascore = "%d(%d)" % (self.ascore, aa) + bscore = "%d(%d)" % (self.bscore, bb) msg = a.name + ' ' + str(ascore) + ' ' + str(bscore) + ' ' + b.name msg += ' ' + tag @@ -795,7 +788,7 @@ def get_table(self): def tablesort(self, key): """ Order teams """ - return key.points, key.goals - key.against, key.goals + return key.points, key.goals - key.against, key.goals, -1 * key.yellow @@ -843,7 +836,7 @@ def __init__(self, groups, places=None, dates=None, self.start_time = datetime.utcnow() # factor to warp time by - self.timewarp = 10 / (30 * 24 * 60 * 60) + self.timewarp = 120 / (30 * 24 * 60 * 60) self.sleep = 0.01 self.knockout = [] @@ -864,8 +857,6 @@ def warp(self, when): # how far are we in? elapsed = (datetime.utcnow() - self.start_time).total_seconds() - print('WARP', when, seconds, elapsed) - warp = (seconds * self.timewarp) - elapsed return warp @@ -889,7 +880,6 @@ def match_game(self, key): bname = game.b.name.lower() gkey = (game.when, aname, bname) - #print(game, gkey) if gkey in gl: raise ValueError("Duplicate game key %s" % str(key)) gl[gkey] = game @@ -946,6 +936,15 @@ async def dispatch_events(self): task = await curio.spawn(event.start) etasks.append(task) + elif what == 'penalty': + team, who, og = whodunnit(extras) + + score = int(extras[-1]) != 0 + + event = Penalty(team, who, when, game, score, jsf=self) + task = await curio.spawn(event.start) + etasks.append(task) + elif what == 'ft': event = FullTime(when, game, jsf=self) @@ -979,7 +978,6 @@ async def load_group_games(self): game.b.games.append(game) if game.simulated: - print('XXXXXXXX', game.when) kos.append(KickOff(game.when, game, jsf=self)) self.its_a_knockout() @@ -988,7 +986,8 @@ async def load_group_games(self): for game in self.knockout: game.events = self.events - kos.append(KickOff(game.when, game, jsf=self)) + if game.simulated: + kos.append(KickOff(game.when, game, jsf=self)) kotasks = [] for ko in kos: @@ -1016,14 +1015,11 @@ def its_a_knockout(self): key = sorted(groups.keys()) key = list(key) - print(key) key2 = '' for x in range(0, len(key), 2): key2 += key[x+1] + key[x] - print(key2) - games = [] ix = 0 @@ -1061,6 +1057,7 @@ def its_a_knockout(self): self.winners[game.number] = self.knockout[15], 'b' self.seconds[game.number] = self.knockout[14], 'a' + def generate_teams(self): """ Generate teams """ @@ -1124,8 +1121,8 @@ def apres_match(self, game): kgame, label = self.winners[game.number] wteam = game.winner() - print('knockout winner:', wteam, game) setattr(kgame, label, wteam) + print('knockout winner:', wteam, game, kgame) wteam.games.append(kgame) if game.number in self.seconds: @@ -1590,13 +1587,13 @@ class NorthPole(Place): # Simulate a knockout draw + bugs jsf_places = [ - places['kazan'], places['sochi'], - places['moscow'], - places['novgorod'], - + places['kazan'], places['samara'], places['rostovondon'], + + places['moscow'], + places['novgorod'], places['stpetersberg'], places['spartak'], @@ -1615,13 +1612,13 @@ class NorthPole(Place): ] jsf_dates = [ - datetime(2018, 6, 30, 14, 0), datetime(2018, 6, 30, 18, 0), - datetime(2018, 7, 1, 14, 0), - datetime(2018, 7, 1, 18, 0), - + datetime(2018, 6, 30, 14, 0), datetime(2018, 7, 2, 14, 0), datetime(2018, 7, 2, 18, 0), + + datetime(2018, 7, 1, 14, 0), + datetime(2018, 7, 1, 18, 0), datetime(2018, 7, 3, 14, 0), datetime(2018, 7, 3, 18, 0), @@ -1659,7 +1656,6 @@ def __init__(self, parent, jsf=None, venues=None, gallery='.', self.messages = [] self.start_time = datetime.utcnow() - self.delta_t = 1. # teleprinter location self.teleprint_xxyy = .85, .425 @@ -1685,11 +1681,11 @@ def __init__(self, parent, jsf=None, venues=None, gallery='.', async def slower(self): """ Go through time more slowly """ - self.delta_t /= 2 + self.jsf.timewarp *= 2 async def faster(self): """ Go through time more quickly """ - self.delta_t *= 2 + self.jsf.timewarp /= 2 async def toggle_show_games(self): """ Toggle matches view """ @@ -1755,16 +1751,13 @@ def latlon2xy(self, place): async def step_balls(self): """ do something here """ - #print('mexican wave step_balls') + for place in self.places: - #print(place) - #print(self.width, self.height, xx, yy) size = 5 self.ball(place, fill='red', size=5) self.message(place.name, place, yoff=-20, fill='yellow') - #print('done places') locations = defaultdict(list) for team in jsf.generate_teams(): @@ -1812,7 +1805,6 @@ def draw(self): import time self.beanstalk.create_time = time.time() - #print(self.beanstalk.xx, self.beanstalk.yy) self.beanstalk.draw(self.canvas, self.width, self.height, 'red') @@ -1946,8 +1938,6 @@ def show_games(self): yy = 0.05 for game in self.jsf.generate_games(): - print(game) - self.message(msg=str(game), xx=xx, yy=yy, fill='pink') @@ -1968,6 +1958,11 @@ def show_knockout(self): bscore = game.bscore if ascore is None: ascore = '-' if bscore is None: bscore = '-' + + elif ascore == bscore: + apen, bpen = game.pens_score() + ascore += apen / 10 + bscore += bpen / 10 self.message(msg="{} {} {} {}".format( aa, ascore, bscore, bb), @@ -1984,8 +1979,6 @@ def show_knockout(self): if final.ascore != None: xx += 0.1 yy = 0.6 - for game in final.winner().games: - print(game.where, game.when) self.message(msg="{}".format( final.winner().name), xx=xx, yy=yy, From 5c14a9b9752caca50f3b7c991a8af627b8f45304 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 3 Jul 2018 20:21:51 -0400 Subject: [PATCH 372/642] fergie edition timewarp at end of game --- karmapi/wc.csv | 2 +- karmapi/wc.py | 9 +-------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/karmapi/wc.csv b/karmapi/wc.csv index 817b614..4b75f67 100644 --- a/karmapi/wc.csv +++ b/karmapi/wc.csv @@ -546,7 +546,7 @@ 2018, 7, 2, 18, bel, jap, 69, goal, bel, 5 2018, 7, 2, 18, bel, jap, 73, goal, bel, 8 2018, 7, 2, 18, bel, jap, 92, goal, bel, 22 -2018, 7, 2, 18, bel, jap, 92, ft, 3, 2 +2018, 7, 2, 18, bel, jap, 93, ft, 3, 2 2018, 7, 3, 14, swe, swi, 0, ko, 0, 0 2018, 7, 3, 14, swe, swi, 31, yellow, swe, 2 diff --git a/karmapi/wc.py b/karmapi/wc.py index d2f31f7..f98f0d7 100644 --- a/karmapi/wc.py +++ b/karmapi/wc.py @@ -836,7 +836,7 @@ def __init__(self, groups, places=None, dates=None, self.start_time = datetime.utcnow() # factor to warp time by - self.timewarp = 120 / (30 * 24 * 60 * 60) + self.timewarp = 10 / (30 * 24 * 60 * 60) self.sleep = 0.01 self.knockout = [] @@ -956,11 +956,7 @@ async def dispatch_events(self): print('*****', when, ateam, bteam, what, extras) self.tasks += etasks - for task in etasks: - await task.join() - # fixme do something with knockout - pass async def load_group_games(self): """ Put the group games into the game queue """ @@ -996,9 +992,6 @@ async def load_group_games(self): self.tasks += kotasks - for ko in kotasks: - await ko.join() - def its_a_knockout(self): """ Set up knockout stage """ From 5ab4b3fc3a22220a0e5f6f14e3ad9dcbd70913b1 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 3 Jul 2018 20:39:06 -0400 Subject: [PATCH 373/642] move wc events to wc sub-folder --- karmapi/{wc.csv => wc/events.csv} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename karmapi/{wc.csv => wc/events.csv} (100%) diff --git a/karmapi/wc.csv b/karmapi/wc/events.csv similarity index 100% rename from karmapi/wc.csv rename to karmapi/wc/events.csv From 351ddc582b7ff989c5eeb6c681b3313faae147d9 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 3 Jul 2018 22:11:09 -0400 Subject: [PATCH 374/642] split wc up into pieces --- karmapi/wc.py | 2149 ---------------------------------------- karmapi/wc/__init__.py | 0 karmapi/wc/base.py | 11 + karmapi/wc/events.py | 117 +++ karmapi/wc/game.py | 354 +++++++ karmapi/wc/group.py | 58 ++ karmapi/wc/jsf.py | 417 ++++++++ karmapi/wc/mexwave.py | 433 ++++++++ karmapi/wc/place.py | 11 + karmapi/wc/team.py | 143 +++ karmapi/wc/wc.py | 160 +++ karmapi/wc/wc2018.py | 580 +++++++++++ 12 files changed, 2284 insertions(+), 2149 deletions(-) delete mode 100644 karmapi/wc.py create mode 100644 karmapi/wc/__init__.py create mode 100644 karmapi/wc/base.py create mode 100644 karmapi/wc/events.py create mode 100644 karmapi/wc/game.py create mode 100644 karmapi/wc/group.py create mode 100644 karmapi/wc/jsf.py create mode 100644 karmapi/wc/mexwave.py create mode 100644 karmapi/wc/place.py create mode 100644 karmapi/wc/team.py create mode 100644 karmapi/wc/wc.py create mode 100644 karmapi/wc/wc2018.py diff --git a/karmapi/wc.py b/karmapi/wc.py deleted file mode 100644 index f98f0d7..0000000 --- a/karmapi/wc.py +++ /dev/null @@ -1,2149 +0,0 @@ -""" World Cup - -Over the years I've done a few world cup predict the scores things. - -There's another one coming so here we go. - -Eight groups of four. - -And six games per group. - -Will likely turn into a simulation of errors. - -Prior? probabilities for games.. aim it to predict first and second in each -group for now as those will be the ones that get there. - -Things to include maybe... factors for order games are played. - -Oh and stuff like what will be going on at home by June 2018. - -Russia are the hosts, and I understand have graciously offered to represent the -USA and Italy too, sorry you couldn't make the party. - -Seek Irish, Scots or English for advice on how to survive when your team is not -there. - -All times are UTC and subject to typos and other delights. - -The story so far. - -It's December 2017. World Cup finals draw in Russia is out. - -Italy and USA are already out. Sweden eliminated Italy and the USA story is more complex. - -On the Mueller advent calendar Michael Flynn pleaded guilty on the 1st. - -Picture wasn't clear on the 2nd. 3-4 maybe more faces? - -Back to the world cup. - -Group A. - -rus sau egy urg - - -OK.. back from the fixture lists. - -Order of games interesting and need to add places. Fair bit of moving around -in some groups. - -Some teams get to play after seeing the other game in their group in first two -rounds of games. - -As groups progress teams will be looking at what comes next, if they have a -couple of wins, or otherwise just how to get out of the group. - -Seeding has placed the teams with higher FIFA rankings with potentially less -travel complications, but then there are the fans back home and time zone -considerations. - -Now it is 2017 so there may be an obligatory block chain connection, but if so -it well be super low tech. - -And simulations. For now stuck deciding what to simulate.. oh and priors.. - -I think we may need some events here soon. - -Back to the coding. So rule 0: keep it under 1000 lines, bonus marks under -500. World cup rules, so you decide how to count. - -Subtracting docstrings there should be a lot less. And with luck sphinx will -magically turn the code into ok docs. - -rule 1: there is no rule one. It's the world cup, so breaking all the coding -rules. See also counting lines of code, world cup style. - -Or rather just writing what seems easiest at the time. - -There is a fair bit of going round in circles: check the commit log see git. - -Ok.. back to the football. - -The world cup mixes up 32 teams from around the world. The final draw mixes -everything up and there are some fascinating match ups. - -Simon Kuiper, football anthropologist?, wrote a fascinating book about matches -between countries, places that had been at war in the very recent past. Many -of the games covered were at world cups or big football federation finals. - -Others were just qualifying games. - -Sources: Wikipedia and scriblings on beer mats. - -Places coming along. - -Rostov-on-Don. Lots of twin towns, including Toronto. - -Some interesting games there too. - -545km to the south - -Simulations -=========== - -Run the code and you get a draw for the last 16. - -I am starting to simulate the first round games with 4 bottles in a pool. It's -like Paul the octobpus, but not quite so scientific. Or maybe it is? - -eng tun bel and pan played already. See Game's for results. - - -""" - -from random import random, randint -import argparse -import csv -from collections import Counter, defaultdict, deque -from datetime import datetime, timedelta -import calendar -import sys - -import curio - -from karmapi import pigfarm, beanstalk - - -# number of teams -n = 32 -squadsize = 23 - -class Team: - - def __init__(self, name=None, win=None): - """ Init the team with no name? """ - self.name = name - - # default location: North Pole - self.lat = 90 - self.lon = 0 - - self.win = win or 1 / n - self.home = False - - self.reset() - - - def reset(self): - - self.points = 0 - self.played = 0 - self.yellow = 0 - self.red = 0 - self.goals = 0 - self.against = 0 - self.home = None - - # Keep track of games played/to be played? - self.games = [] - - self.load_squad() - - def load_squad(self): - """ Numbers 1 to sqadsize """ - self.squad = defaultdict(int) - - for player in range(squadsize): - self.squad[player] = Player(player + 1) - - def where(self, when): - """ Where is the team? """ - - if self.home is not None: - self.lat, self.lon = self.home.lat, self.home.lon - return self.lat, self.lon - - last_game = None - next_game = None - for game in self.games: - if game.when < when: - last_game = game - else: - next_game = game - break - - if last_game is None and next_game is None: - # return a defualt? - return self.lat, self.lon - - # if one is missing, use the other - last_game = last_game or next_game - next_game = next_game or last_game - - # Interpolate based on time - self.lat, self.lon = warp(last_game, next_game, when) - - return self.lat, self.lon - - def go_home(self): - - self.home = NorthPole() - - def __str__(self): - - return self.name - - - def stats(self): - - return dict( - played = self.played, - points = self.points, - goals = self.goals, - against = self.against, - goal_delta = self.goals - self.against, - red = self.red, - yellow = self.yellow) - - def statto(self): - """ Return line of stats for the team """ - - stats = self.stats() - msg = "%s" % self.name - msg += " {played:4d}".format(**stats) - msg += " {points:4d} {goal_delta:4d}".format(**stats) - msg += " {goals:4d} {against:4d}".format(**stats) - - return msg - -class Player: - """ A player of class - - Tony Currie, Kyle Walker, Harry Maguire - """ - - def __init__(self, number): - - self.goals = [] - self.red = [] - self.yellow = [] - self.number = number - -class GameEvent: - - def __init__(self, when=None, game=None, jsf=None): - - self.when = when - self.game = game - self.jsf = jsf - self.start_evt = curio.Event() - - async def start(self): - - # want to wait appropriate time, for now just 1 - delay = self.jsf.warp(self.when) - try: - await curio.timeout_after(delay, self.start_evt.wait) - except curio.TaskTimeout: - pass - - await self.run() - - async def run(self): - - print('ruunning: ', self.when, self.game) - - - def __str__(self): - - return 'GAMEEVENT ' + str(self.when) - -class CheckPoint(GameEvent): - - async def run(self): - - print('check point: ', self.when, self.game) - - await self.jsf.check_point() - - def __str__(self): - - return 'CHECK POINT ' + str(self.when) - - - -class TeamEvent(GameEvent): - """ An event that involves one team in the game """ - - def __init__(self, team, who=None, when=None, game=None, og=False, **kwargs): - - super().__init__(when, game, **kwargs) - - self.team = team - self.who = who - self.og = og - -class Goal(TeamEvent): - - async def run(self): - - print('goal', self.team, self.when, self.who, self.game, self.og) - # this sort of seems weird - await self.game.goal(self.team, self.who, self.when) - - -class Yellow(TeamEvent): - - async def run(self): - - print('yellow', self.team, self.when, self.who, self.game, self.og) - # this sort of seems weird - await self.game.yellow(self.team, self.who, self.when) - - -class KickOff(GameEvent): - - async def run(self): - - print('ko', self.when, self.game, 'KICK OFF') - await self.game.kick_off(self.jsf) - -class HalfTime(GameEvent): - - async def run(self): - - print(self.when, self.game, 'HALF TIME') - await self.game.half_time() - -class FullTime(GameEvent): - - async def run(self): - - print(self.when, self.game, 'FULL TIME') - await self.game.full_time() - - self.jsf.apres_match(self.game) - - - -class Penalty(Goal): - """ Penalty in a shoot out - - which: which penalty: 1, 2, 3 etc - """ - def __init__(self, team, who=None, when=None, game=None, score=False, **kwargs): - - super().__init__(team, who=who, when=when, game=game, **kwargs) - - print('PEN', self.when, team, score) - - self.score = score - self.penalty = True - - async def run(self): - - await self.game.penalty(self) - - -def warp(a, b, when): - """ Interpolate between a and b based on time """ - - delta_t = (b.when - a.when).total_seconds() - - if delta_t == 0: - return a.where.lat, a.where.lon - - delta_w = (when - a.when).total_seconds() - - frac = delta_w / delta_t - - aa = a.where - bb = b.where - - lat = aa.lat - lon = aa.lon - - lat += frac * (bb.lat - aa.lat) - lon += frac * (bb.lon - aa.lon) - - return lat, lon - - -class Game: - - NUMBER = 1 - - def __init__(self, a, b, when, where=None, ascore=None, bscore=None): - - self.a = a - self.b = b - self.when = when - self.where = where - self.label = '' - - # ignore ascore/bscore, let events do the work - self.ascore = None - self.bscore = None - - self.apen = [] - self.bpen = [] - - self.minute = 0 - - # flag if score was simulated - do this if game is in the future - self.simulated = self.when > datetime.utcnow() - if self.simulated: - print('SIMULATED', self.simulated, self) - - # this has to go away.. - self.number = Game.NUMBER - Game.NUMBER += 1 - - - def __hash__(self): - - return id(self) - - def reset(self): - """ Reset score if it was random """ - self.ascore = self.bscore = 0 - - self.apen = [] - self.bpen = [] - - self.minute = 0 - - def __str__(self): - - aname = bname = '---' - if self.a: - aname = self.a.name - - if self.b: - bname= self.b.name - - msg = ' '. join(( - str(self.label), - aname, - 'v', - bname, - self.day_name(), - str(self.when), - str(self.where))) - - if self.ascore is not None: - msg += ' ' + '-'.join((str(self.ascore), str(self.bscore))) - - return msg - - def day_name(self): - - return calendar.day_name[self.when.weekday()] - - def __eq__(self, other): - - return self.number == other.number - - def __ne__(self, other): - - return self.number != other.number - - def __gt__(self, other): - - return (self.when, self.number) > (other.when, other.number) - - def __le__(self, other): - - return (self.when, self.number) <= (other.when, other.number) - - def __ge__(self, other): - - return (self.when, self.number) >= (other.when, other.number) - - async def kick_off(self, jsf): - """ Game has kicked off """ - self.reset() - - if not self.simulated: - return - - print('SIMULATING', self) - - minutes = 45 + randint(0, 7) - - await self.half(minutes) - - await self.half_time() - - await self.second_half() - - await self.full_time() - - ko = not self.is_group() - - # knockout match, are we done? - if ko and self.ascore == self.bscore: - - await self.extra_time() - await self.extra_half_time() - await self.extra_full_time() - - if self.ascore == self.bscore: - await self.penalties() - - print('APRES!!!') - jsf.apres_match(self) - - def is_group(self): - - return hasattr(self, 'group') - - async def half(self, minutes): - """ Run a half """ - - for minute in range(minutes): - await self.run_minute() - - - async def run_minute(self): - - yellow_per_minute = 1 / 30 - red_per_minute = 1 / 150 - goals_per_minute = 1 / 30 - - # score a goal? - if random() < goals_per_minute: - # who scored - if random() <= 0.5: - self.ascore += 1 - else: - self.bscore += 1 - - await self.flash(" %dm" % self.minute, fill='green') - - if random() < yellow_per_minute: - # yellow card? - pass - - if random() < red_per_minute: - # red card? - pass - - self.minute += 1 - - return self.ascore, self.bscore - - async def half_time(self): - - await self.flash(fill='blue', tag='HT') - - async def second_half(self): - minutes = 45 + randint(0, 7) - await self.half(minutes) - - async def full_time(self): - - await self.flash(fill='yellow', tag='FT') - - async def extra_time(self): - minutes = 15 + randint(0, 3) - await self.half(minutes) - - async def extra_half_time(self): - pass - - async def extra_full_time(self): - minutes = 15 + randint(0, 3) - await self.half(minutes) - - async def penalties(self): - """ Don't miss this """ - first, second = self.a, self.b - - if random() < 0.5: - first, second = second, first - - total = 0 - done = False - while not done: - done = self._penalty(first) - first, second = second, first - - def _penalty(self, team): - """ Simulate a penalty """ - which = len(self.apen) + len(self.bpen) - - if random() < 0.5: - pen = Penalty(team, score=True, game=self, - when=self.when + timedelta(minutes=120 + which), - who = randint(1, 23)) - - if team is self.a: - self.apen.append(pen) - else: - self.bpen.append(pen) - - return self.all_over() - - async def penalty(self, pen): - - if pen.team is self.a: - self.apen.append(pen) - else: - self.bpen.append(pen) - - def pens_score(self): - """ score in penalties """ - apens = [x for x in self.apen if x.score] - bpens = [x for x in self.bpen if x.score] - - return len(apens), len(bpens) - - - def all_over(self): - """ Are the pens done? """ - - a, b = self.pens_score() - - if a == b: - return False - - aa = len(self.apen) - bb = len(self.bpen) - - which = aa + bb - - if which <= 10: - aleft = 5 - aa - bleft = 5 - bb - - else: - aleft = bleft = 0 - - if aa < bb: - aleft = 1 - if bb < aa: - bleft = 1 - - if b > a + aleft: - return True - - if a > b + bleft: - return True - - async def goal(self, team, who=None, when=None): - - if team is self.a: - self.ascore += 1 - else: - self.bscore += 1 - - minute = int((when - self.when).total_seconds() / 60) - await self.flash(" %dm" % minute, fill='green') - - - async def yellow(self, team, who=None, when=None): - - if team is self.a: - self.a.yellow += 1 - else: - self.b.yellow += 1 - - minute = int((when - self.when).total_seconds() / 60) - await self.flash(" %dm" % minute, fill='purple') - - - async def red(self, team, who=None, when=None): - pass - - async def sub(self, team, off=None, on=None, when=None): - pass - - def apres_match(self): - - a = self.a - b = self.b - - a.goals += self.ascore - b.goals += self.bscore - - a.against += self.bscore - b.against += self.ascore - - if self.is_group(): - - if self.ascore > self.bscore: - a.points += 3 - - elif self.bscore > self.ascore: - b.points += 3 - - else: - a.points += 1 - b.points += 1 - - async def flash(self, tag='', fill='red', card=False): - - a = self.a - b = self.b - ascore = self.ascore - bscore = self.bscore - if self.apen: - aa, bb = self.pens_score() - ascore = "%d(%d)" % (self.ascore, aa) - bscore = "%d(%d)" % (self.bscore, bb) - - msg = a.name + ' ' + str(ascore) + ' ' + str(bscore) + ' ' + b.name - msg += ' ' + tag - - when = self.when + timedelta(minutes=self.minute) - await self.events.put(dict(where=self.where, msg=msg, yoff=-90, - when=when, fill=fill, card=card)) - - def winner(self): - """ Return winning team """ - if self.ascore > self.bscore: - return self.a - elif self.bscore > self.ascore: - return self.b - - # penalties - aa, bb = self.pens_score() - if aa > bb: - return self.a - - return self.b - - def loser(self): - - win = self.winner() - if win == self.a: - return self.b - - return self.a - - -class Group: - - def __init__(self, teams=None, games=None): - - self.teams = teams - self.games = games or [] - self.played = 0 - - def winner(self): - """ Pick a winner """ - return self.get_table()[0] - - def second(self): - """ Pick a second """ - return self.get_table()[1] - - def is_finished(self): - - size = len(self.teams) - return self.played == (size * (size - 1)) / 2 - - def __str__(self): - - return str(self.teams, self.games) - - def reset(self): - """ reset for a new run """ - for game in self.games: - game.reset() - - for team in self.teams: - team.reset() - - self.played = 0 - - - def table(self): - """ Show the group table """ - teams = self.get_table() - - for team in teams: - print(team) - print(team.statto) - - - def get_table(self): - """ Return teams sorted per table """ - teams = list(self.teams) - - teams = sorted(teams, key=self.tablesort) - - return list(reversed(teams)) - - def tablesort(self, key): - """ Order teams """ - return key.points, key.goals - key.against, key.goals, -1 * key.yellow - - - - -class JeuxSansFrontieres: - """ The knockout stage. - - Winners and seconds from group stage come through into a - last 16 grid that looks something like this: - - wa rb - wc rd w w w w w w W r - - we rf w w - wg rh - - wb ra w w w w s s T f - wd rc - - wf re w w - wh rg - - with abcdefgh - and badcfehg - - - So lets set it up so we can do: - - * simulate groups - * do draw for knockout stage - * get games for final stage - - """ - def __init__(self, groups, places=None, dates=None, - when=None, game_events=None): - self.groups = groups - - # places and dates for knockout stage - self.places = places - self.dates = dates - - self.when = when or datetime(2018, 6, 14) - self.start = self.when - - self.start_time = datetime.utcnow() - - # factor to warp time by - self.timewarp = 10 / (30 * 24 * 60 * 60) - self.sleep = 0.01 - - self.knockout = [] - self.winners = {} - self.seconds = {} - - self.events = curio.UniversalQueue() - - self.game_events = game_events or [] - - self.tasks = [] - - def warp(self, when): - """ convert when to a delay in seconds """ - start = self.start - seconds = (when - start).total_seconds() - - # how far are we in? - elapsed = (datetime.utcnow() - self.start_time).total_seconds() - - warp = (seconds * self.timewarp) - elapsed - return warp - - def iwarp(self, ticks): - """ convert tick time to a datetime """ - return self.start + timedelta(seconds=ticks / self.timewarp) - - - def match_game(self, key): - - when, ateam, bteam = key - - # build game lookup - gl = {} - for game in self.generate_games(): - game.events = self.events - - aname = bname = '-' - if game.a: - aname = game.a.name.lower() - bname = game.b.name.lower() - - gkey = (game.when, aname, bname) - if gkey in gl: - raise ValueError("Duplicate game key %s" % str(key)) - gl[gkey] = game - - # Now find the game for this key - game = gl.get(key) - - if game is None: - game = gl.get((key[0], '-','-')) - - return game - - - async def dispatch_events(self): - """ Dispatch events to the appropriate game """ - - if not self.game_events: - return - - knockout = [] - etasks = [] - for event in self.game_events: - - kotime, when, ateam, bteam, what, extras = event - - key = kotime, ateam, bteam - - game = self.match_game(key) - - if not game: - knockout.append((key, event)) - continue - - # turn team names into teams - ateam = name2team(ateam) - bteam = name2team(bteam) - - # got the game. now create an appropriate event - if what == 'goal': - team, who, og = whodunnit(extras) - event = Goal(team, who, when, game, og, jsf=self) - task = await curio.spawn(event.start) - etasks.append(task) - - elif what == 'yellow': - team, who, og = whodunnit(extras) - event = Yellow(team, who, when, game, jsf=self) - task = await curio.spawn(event.start) - etasks.append(task) - - - elif what == 'ko': - event = KickOff(when, game, jsf=self) - task = await curio.spawn(event.start) - etasks.append(task) - - elif what == 'penalty': - team, who, og = whodunnit(extras) - - score = int(extras[-1]) != 0 - - event = Penalty(team, who, when, game, score, jsf=self) - task = await curio.spawn(event.start) - etasks.append(task) - - elif what == 'ft': - - event = FullTime(when, game, jsf=self) - task = await curio.spawn(event.start) - etasks.append(task) - - else: - # just print out the event info - print('*****', when, ateam, bteam, what, extras) - - self.tasks += etasks - - - async def load_group_games(self): - """ Put the group games into the game queue """ - - kos = [] - - for label, group in self.groups.items(): - group.name = label - group.reset() - for game in group.games: - game.group = group - game.label = label.upper() - - game.a.games.append(game) - game.b.games.append(game) - - if game.simulated: - kos.append(KickOff(game.when, game, jsf=self)) - - self.its_a_knockout() - - await self.dispatch_events() - - for game in self.knockout: - game.events = self.events - if game.simulated: - kos.append(KickOff(game.when, game, jsf=self)) - - kotasks = [] - for ko in kos: - task = await curio.spawn(ko.start) - kotasks.append(task) - - self.tasks += kotasks - - - def its_a_knockout(self): - """ Set up knockout stage """ - self.knockout = [] - Game.NUMBER = 49 - - places = self.places or (['???'] * len(games)) - dates = self.dates or [datetime.today()] * len(games) - - for where, when in zip(places, dates): - self.knockout.append(Game(None, None, when, where)) - - groups = self.groups - key = sorted(groups.keys()) - - key = list(key) - - key2 = '' - for x in range(0, len(key), 2): - key2 += key[x+1] + key[x] - - games = [] - - ix = 0 - for gps in key, key2: - for x in range(0, len(key), 2): - - a = gps[x] - b = gps[x+1] - - self.winners[a] = self.knockout[ix], 'a' - self.seconds[b] = self.knockout[ix], 'b' - ix += 1 - - # now do knockout stage - ko = self.knockout - for ix, game in enumerate(ko[:8]): - gix = 8 + int(ix / 2) - if ix % 2 == 0: - self.winners[game.number] = self.knockout[gix], 'a' - else: - self.winners[game.number] = self.knockout[gix], 'b' - - for ix, game in enumerate(ko[8:12]): - gix = 12 + int(ix / 2) - if ix % 2 == 0: - self.winners[game.number] = self.knockout[gix], 'a' - else: - self.winners[game.number] = self.knockout[gix], 'b' - - for ix, game in enumerate(ko[12:14]): - if ix % 2 == 0: - self.winners[game.number] = self.knockout[15], 'a' - self.seconds[game.number] = self.knockout[14], 'b' - else: - self.winners[game.number] = self.knockout[15], 'b' - self.seconds[game.number] = self.knockout[14], 'a' - - - - def generate_teams(self): - """ Generate teams """ - for group in self.groups.values(): - for team in group.teams: - yield team - - def generate_games(self): - """ Generate games """ - games = set() - - for team in self.generate_teams(): - for game in team.games: - games.add(game) - - games.update(self.knockout) - - for game in sorted(games): - yield game - - - def apres_match(self, game): - """ Deal with updating of knockout stage """ - - game.apres_match() - - if game.number == 63: - print('third place:', game.winner()) - return - if game.number == 64: - print('Winner:', game.winner()) - return - - - if game.is_group(): - group = game.group - group.played += 1 - - game.a.played += 1 - game.b.played += 1 - - key = game.label.lower() - kgame, label = self.winners[key] - wteam = group.winner() - setattr(kgame, label, wteam) - if group.is_finished(): - wteam.games.append(kgame) - - kgame, label = self.seconds[key] - steam = group.second() - setattr(kgame, label, steam) - if group.is_finished(): - steam.games.append(kgame) - - for team in group.teams: - if team not in (wteam, steam): - print('out', team) - team.go_home() - - else: - kgame, label = self.winners[game.number] - wteam = game.winner() - - setattr(kgame, label, wteam) - print('knockout winner:', wteam, game, kgame) - wteam.games.append(kgame) - - if game.number in self.seconds: - kgame, label = self.seconds[game.number] - lteam = game.loser() - setattr(kgame, label, lteam) - lteam.games.append(kgame) - else: - game.loser().go_home() - - - async def reset(self): - """ Reset things to start again """ - for task in self.tasks: - await task.cancel() - - self.now = self.start - self.start_time = datetime.utcnow() - Game.NUMBER -= len(self.knockout) - - self.knockout = [] - self.winners = {} - self.seconds = {} - - await self.load_group_games() - - async def run(self): - """ Run the games - - run the group stage - - generate knockout bracket - - run knockout - - collect stats - - reset - - AND/OR: - - Generate events. - """ - print('jsf: run start') - await self.reset() - - if self.dump: - for game in self.generate_games(): - dump(game, self.dump) - - self.dump.close() - sys.exit(0) - - return - - - -class Place: - - def __str__(self): - - return self.name - - def __repr__(self): - - return str(self) - -class Moscow(Place): - """ Final """ - - name = 'Moscow Luzhniki' - lat = 55 + (45 / 60) - lon = 37 + (37 / 60) - -class Spartak(Place): - """ Spartak Moscow """ - - name = 'Moscow Oktkrytiye' - lat = 57 + (49 / 60) - lon = 34 + (26 / 60) - - xlat = 55 + (49 / 60) - xlon = 37 + (26 / 60) - - -class StPetersberg(Place): - """ Place of many names """ - - name = 'St Petersberg' - lat = 59 + (58 / 60) - lon = 30 + (14 / 60) - -class Volgograd(Place): - """ Down south """ - - name = 'Volgograd' - lat = 48 + (45 / 60) - lon = 44 + (33 / 60) - -class Novgorod(Place): - """ Central """ - - name = 'Nizhny Novgorod' - lat = 56 + (20 / 60) - lon = 43 + (57 / 60) - -class Kaliningrad(Place): - """ North West port """ - - name = 'Kaliningrad' - lat = 54 + (42 / 60) - lon = 20 + (32 / 60) - -class RostovOnDon(Place): - """ Sheffield in Russia """ - name = "Rostov-on-Don" - lat = 47 + (13 / 60) - lon = 39 + (44 / 60) - -class Kazan(Place): - """ - - https://tools.wmflabs.org/geohack/geohack.php? - - pagename=Kazan_Arena& - - params=55_49_14.3_N_49_9_40.0_E_type:landmark """ - - name = 'Kazan' - lat = 55 + (49 / 60) + (14.3 / 3600) - lon = 49 + (9 / 60) + (40.0 / 3600) - -class Samara(Place): - """ """ - - name = 'Samara' - lat = 53 + (17 / 60) - lon = 10 + (14 / 60) - -class Yekaterinburg(Place): - """ """ - - name = 'Central Stadium' - lat = 56 + (50 / 60) - lon = 60 + (34 / 60) - -class Saransk(Place): - """ """ - - name = 'Mordovia Arena' - lat = 54 + (11 / 60) - lon = 45 + (12 / 60) - -class Sochi(Place): - """ """ - - name = 'Fisht Olympic Stadium' - lat = 43 + (24 / 60) - lon = 39 + (57 / 60) - -class NorthPole(Place): - """ Where teams go when out? """ - - name = 'North Pole' - lat = 90 - lon = 0 - - - -places = dict( - - moscow=Moscow(), - spartak=Spartak(), - stpetersberg=StPetersberg(), - - kaliningrad=Kaliningrad(), - - novgorod=Novgorod(), - yekaterinburg=Yekaterinburg(), - kazan=Kazan(), - saransk=Saransk(), - samara=Samara(), - - volgograd=Volgograd(), - rostovondon=RostovOnDon(), - sochi=Sochi(), - ) - -# Group A -rus = Team('RUS') -sau = Team('SAU') -egy = Team('EGY') -urg = Team('URG') - -# Group B -por = Team('POR') -spa = Team('SPA') -mor = Team('MOR') -ira = Team('IRA') - -# group C -fra = Team('FRA') -aus = Team('AUS') -per = Team('PER') -den = Team('DEN') - -# group D -arg = Team('ARG') -ice = Team('ICE') -cro = Team('CRO') -nig = Team('NIG') - -# group E -bra = Team('BRA') -swi = Team('SWI') -crc = Team('CRC') -ser = Team('SER') - -# group F -ger = Team('GER') -swe = Team('SWE') -mex = Team('MEX') -sko = Team('SKO') - -# group G -bel = Team('BEL') -pan = Team('PAN') -tun = Team('TUN') -eng = Team('ENG') - -# group H -pol = Team('POL') -sen = Team('SEN') -col = Team('COL') -jap = Team('JAP') - - -groups = dict( - a=Group(teams = [rus, sau, egy, urg], - games = [ - Game(rus, sau, datetime(2018, 6, 14, 15, 0), - where=places['moscow'], - ascore=5, bscore=0), - - Game(egy, urg, datetime(2018, 6, 15, 12, 0), - where=places['yekaterinburg'], - ascore=0, bscore=1), - - - Game(rus, egy, datetime(2018, 6, 19, 18, 0), - where=places['stpetersberg'], - ascore=3, bscore=1), - - Game(urg, sau, datetime(2018, 6, 20, 15, 0), - where=places['rostovondon'], - ), - - - Game(urg, rus, datetime(2018, 6, 25, 14, 0), - where=places['samara'], - ), - Game(sau, egy, datetime(2018, 6, 25, 14, 0), - where=places['volgograd'], - ), - ]), - - b=Group(teams = [por, spa, mor, ira], - games = [ - Game(mor, ira, datetime(2018, 6, 15, 15, 0), - where=places['stpetersberg'], - ascore=0, bscore=1), - - Game(por, spa, datetime(2018, 6, 15, 18, 0), - where=places['sochi'], - ascore=3, bscore=3), - - - Game(por, mor, datetime(2018, 6, 20, 12, 0), - where=places['moscow'], - ), - Game(ira, spa, datetime(2018, 6, 20, 18, 0), - where=places['kazan'], - ), - - Game(ira, por, datetime(2018, 6, 25, 18, 0), - where=places['saransk'], - ), - Game(spa, mor, datetime(2018, 6, 25, 18, 0), - where=places['kaliningrad'], - ), - ]), - - c=Group(teams = [fra, aus, per, den], - - games = [ - Game(fra, aus, datetime(2018, 6, 16, 10, 0), - where=places['kazan'], - ascore=2, bscore=1), - - Game(per, den, datetime(2018, 6, 16, 14, 0), - where=places['saransk'], - ascore=0, bscore=1), - - - Game(den, aus, datetime(2018, 6, 21, 12, 0), - where=places['samara'], - ), - Game(fra, per, datetime(2018, 6, 21, 15, 0), - where=places['yekaterinburg'], - ), - - Game(den, fra, datetime(2018, 6, 26, 14, 0), - where=places['moscow'], - ), - Game(aus, per, datetime(2018, 6, 26, 14, 0), - where=places['sochi'], - ), - - ]), - - d=Group(teams = [arg, ice, cro, nig], - - games = [ - Game(arg, ice, datetime(2018, 6, 16, 13, 0), - where=places['spartak'], - ascore=1, bscore=1), - - Game(cro, nig, datetime(2018, 6, 16, 19, 0), - where=places['kaliningrad'], - ascore=2, bscore=0), - - - Game(arg, cro, datetime(2018, 6, 21, 18, 0), - where=places['novgorod'], - ), - - Game(nig, ice, datetime(2018, 6, 22, 15, 0), - where=places['volgograd'], - ), - - - Game(nig, arg, datetime(2018, 6, 26, 18, 0), - where=places['stpetersberg'], - ), - Game(ice, cro, datetime(2018, 6, 26, 18, 0), - where=places['rostovondon'], - ), - ]), - - e=Group(teams = [bra, swi, crc, ser], - - games = [ - Game(crc, ser, datetime(2018, 6, 17, 12, 0), - where=places['samara'], - ascore=0, bscore=1), - - Game(bra, swi, datetime(2018, 6, 17, 18, 0), - where=places['rostovondon'], - ascore=1, bscore=1), - - - Game(bra, crc, datetime(2018, 6, 22, 12, 0), - where=places['stpetersberg'], - ), - Game(ser, swi, datetime(2018, 6, 22, 18, 0), - where=places['kaliningrad'], - ), - - Game(ser, bra, datetime(2018, 6, 27, 18, 0), - where=places['spartak'], - ), - Game(swi, crc, datetime(2018, 6, 27, 18, 0), - where=places['novgorod'], - ), - ]), - - f=Group(teams = [ger, swe, mex, sko], - - games = [ - Game(ger, mex, datetime(2018, 6, 17, 15, 0), - where=places['moscow'], - ascore=0, bscore=1), - - Game(swe, sko, datetime(2018, 6, 18, 12, 0), - where=places['novgorod'], - ascore=1, bscore=0), - - - Game(sko, mex, datetime(2018, 6, 23, 15, 0), - where=places['rostovondon'], - ), - Game(ger, swe, datetime(2018, 6, 23, 18, 0), - where=places['sochi'], - ), - - Game(sko, ger, datetime(2018, 6, 27, 14, 0), - where=places['kazan'], - ), - Game(mex, swe, datetime(2018, 6, 27, 14, 0), - where=places['yekaterinburg'], - ), - ]), - - g=Group(teams = [bel, pan, tun, eng], - - games = [ - Game(bel, pan, datetime(2018, 6, 18, 15, 0), - where=places['sochi'], - ascore=3, bscore=0), - - Game(tun, eng, datetime(2018, 6, 18, 18, 0), - where=places['volgograd'], - ascore=1, bscore=2), - - - Game(bel, tun, datetime(2018, 6, 23, 12, 0), - where=places['spartak'], - ), - - Game(eng, pan, datetime(2018, 6, 24, 12, 0), - where=places['novgorod'], - ), - - Game(eng, bel, datetime(2018, 6, 28, 18, 0), - where=places['kaliningrad'], - ), - Game(pan, tun, datetime(2018, 6, 28, 18, 0), - where=places['saransk'], - ), - ]), - - h=Group(teams = [pol, sen, col, jap], - - games = [ - Game(col, jap, datetime(2018, 6, 19, 12, 0), - where=places['saransk'], - ascore=1, bscore=2), - - Game(pol, sen, datetime(2018, 6, 19, 15, 0), - where=places['spartak'], - ascore=1, bscore=2), - - - Game(jap, sen, datetime(2018, 6, 24, 15, 0), - where=places['yekaterinburg'], - ), - Game(pol, col, datetime(2018, 6, 24, 18, 0), - where=places['kazan'], - ), - - Game(jap, pol, datetime(2018, 6, 28, 14, 0), - where=places['volgograd'], - ), - Game(sen, col, datetime(2018, 6, 28, 14, 0), - where=places['samara'], - ), - ])) - - -print() -print("It's a knock out!") - -# Simulate a knockout draw + bugs -jsf_places = [ - places['sochi'], - places['kazan'], - places['samara'], - places['rostovondon'], - - places['moscow'], - places['novgorod'], - places['stpetersberg'], - places['spartak'], - - places['novgorod'], - places['kazan'], - places['samara'], - places['sochi'], - - - places['stpetersberg'], - places['moscow'], - - places['stpetersberg'], - - places['moscow'], - ] - -jsf_dates = [ - datetime(2018, 6, 30, 18, 0), - datetime(2018, 6, 30, 14, 0), - datetime(2018, 7, 2, 14, 0), - datetime(2018, 7, 2, 18, 0), - - datetime(2018, 7, 1, 14, 0), - datetime(2018, 7, 1, 18, 0), - datetime(2018, 7, 3, 14, 0), - datetime(2018, 7, 3, 18, 0), - - datetime(2018, 7, 6, 14, 0), - datetime(2018, 7, 6, 18, 0), - datetime(2018, 7, 7, 14, 0), - datetime(2018, 7, 7, 18, 0), - - datetime(2018, 7, 10, 18, 0), - datetime(2018, 7, 11, 18, 0), - - datetime(2018, 7, 14, 14, 0), - datetime(2018, 7, 15, 15, 0), - ] -jsf = JeuxSansFrontieres(groups, places=jsf_places, dates=jsf_dates) - - -# add a PI Gui? -class MexicanWaves(pigfarm.Yard): - - def __init__(self, parent, jsf=None, venues=None, gallery='.', - dump=None, events=None): - """ Initialise the thing """ - - super().__init__(parent) - - self.jsf = jsf - self.jsf.dump = dump - - if events: - events = list(parse_events(events)) - - self.jsf.game_events = events - - self.messages = [] - - self.start_time = datetime.utcnow() - - # teleprinter location - self.teleprint_xxyy = .85, .425 - self.teleprints = [] - - self.scan_venues(venues) - - self.add_event_map('r', self.reset) - self.add_event_map('S', self.slower) - self.add_event_map('M', self.faster) - self.add_event_map('m', self.toggle_show_games) - self.add_event_map('g', self.toggle_show_groups) - self.add_event_map('t', self.toggle_show_teams) - self.add_event_map('j', self.previous_group) - self.add_event_map('k', self.next_group) - #self.add_event_map(' ', self.toggle_pause) - - self.game_view = False - self.team_view = False - self.group_view = False - self.which_group = 0 - - - async def slower(self): - """ Go through time more slowly """ - self.jsf.timewarp *= 2 - - async def faster(self): - """ Go through time more quickly """ - self.jsf.timewarp /= 2 - - async def toggle_show_games(self): - """ Toggle matches view """ - self.game_view = not self.game_view - - async def toggle_show_teams(self): - """ Toggle teams view """ - self.game_view = not self.team_view - - async def toggle_show_groups(self): - """ Toggle groups view """ - self.group_view = not self.group_view - - async def next_group(self): - """ Go to next group """ - self.which_group += 1 - - if self.which_group == len(self.jsf.groups): - self.which_group = 0 - - async def previous_group(self): - """ Go to previous group """ - self.which_group -= 1 - - if self.which_group < 0: - self.which_group += len(self.jsf.groups) - - - def scan_venues(self, venues): - """ Set the lat lon bounds for the canvas """ - self.places = places = list(venues.values()) - - minlat = min(x.lat for x in places) - maxlat = max(x.lat for x in places) - - minlon = min(x.lon for x in places) - maxlon = max(x.lon for x in places) - - height = maxlat - minlat - width = maxlon - minlon - - wpad = width / 8 - hpad = height / 8 - - # need to add padding to make grid - self.xx = minlon - wpad - self.yy = minlat - hpad - - self.xscale = width + (2 * wpad) - self.yscale = height + (2 * hpad) - - - def latlon2xy(self, place): - """ Convert lat lon to yard coordinates """ - lat = place.lat - lon = place.lon - - xx = int(((lon - self.xx) / self.xscale) * self.width) - yy = self.height - int(((lat - self.yy) / self.yscale) * self.height) - - return xx, yy - - - async def step_balls(self): - """ do something here """ - - for place in self.places: - size = 5 - self.ball(place, fill='red', size=5) - - self.message(place.name, place, yoff=-20, fill='yellow') - - locations = defaultdict(list) - - for team in jsf.generate_teams(): - - wtit = self.what_time_is_it() - team.where(wtit) - xx, yy = self.latlon2xy(team) - - locations[(xx, yy)].append(team) - - # Now draw the things - for key in locations.keys(): - xx, yy = key - yoff = 30 - for team in locations[key]: - self.message(team.name, team, yoff=yoff, fill='green') - - yoff += 30 - - self.show_score_flashes() - - if self.game_view: - self.show_games() - - if self.team_view: - self.show_teams() - - if self.group_view: - self.show_groups() - - if not self.group_view and not self.team_view and not self.game_view: - self.show_tables() - - self.show_knockout() - - - def what_time_is_it(self): - - elapsed = (datetime.utcnow() - self.start_time).total_seconds() - - return self.jsf.iwarp(elapsed) - - - def draw(self): - - import time - self.beanstalk.create_time = time.time() - - self.beanstalk.draw(self.canvas, self.width, self.height, 'red') - - async def reset(self): - """ Reset timer """ - self.start_time = datetime.utcnow() - - self.messages = [] - self.teleprints =[] - - await self.jsf.reset() - #await self.jsf.load_group_games() - - - async def score_flash(self): - - while True: - info = await self.jsf.events.get() - - self.messages.append(info) - - self.teleprint(**info) - - - def show_score_flashes(self): - """ Show the score flashes """ - xx, yy = self.teleprint_xxyy - - for msg, fill in self.teleprints: - - self.message(msg=msg, fill=fill, xx=xx, yy=yy) - xx, yy = xx, yy + .025 - - # Now do messages - keep = {} - for info in reversed(self.messages): - when = info['when'] - - if self.what_time_is_it() < when + timedelta(hours=48): - pos = self.layout(**info) - if pos in keep: - continue - keep[pos] = info - - self.message(**info) - - self.messages = list(keep.values()) - - - def teleprint(self, msg=None, fill='orange', **kwargs): - """ teleprinter messages """ - self.teleprints.append((msg, fill)) - - if len(self.teleprints) > 10: - del self.teleprints[0] - - def layout(self, where=None, xx=None, yy=None, **kwargs): - """ layout for location """ - if xx is None or yy is None: - xx, yy = self.latlon2xy(where) - else: - xx *= self.width - yy *= self.height - - return xx, yy - - - def message(self, msg=None, where=None, fill='red', size=5, xoff=0, yoff=0, - xx=None, yy=None, **kwargs): - """ Message from a place """ - - xx, yy = self.layout(where, xx, yy) - - self.canvas.create_text((xx + xoff, yy + yoff), text=msg, fill=fill) - - - def show_tables(self): - - position = [ - [.10, .1], - [.25, .1], - - [.10, .25], - [.25, .25], - - [.75, .75], - [.90, .75], - - [.75, .9], - [.90, .9], - ] - - for label, group in self.jsf.groups.items(): - - gindex = ord(label) - ord('a') - - xx, yy = position[gindex] - - for team in group.get_table()[::-1]: - self.message( - msg=team.statto(), - xx=xx, - yy=yy, - fill='cyan') - yy -= 0.025 - - def show_groups(self): - - xx = 0.6 - yy = 0.05 - - which = chr(self.which_group + ord('a')) - - group = self.jsf.groups[which] - - for game in group.games: - - self.message(msg=str(game), - xx=xx, yy=yy, fill='magenta') - - yy += 0.025 - - def show_teams(self): - - pass - - - def show_games(self): - - xx = 0.2 - yy = 0.05 - - for game in self.jsf.generate_games(): - self.message(msg=str(game), - xx=xx, yy=yy, fill='pink') - - yy += 0.025 - - def show_knockout(self): - - if not self.jsf.knockout: - return - xx = .1 - yy = .6 - yinc = 0.025 - for ix, game in enumerate(self.jsf.knockout): - aa = game.a or ' ' - bb = game.b or ' ' - - ascore = game.ascore - bscore = game.bscore - if ascore is None: ascore = '-' - if bscore is None: bscore = '-' - - elif ascore == bscore: - apen, bpen = game.pens_score() - ascore += apen / 10 - bscore += bpen / 10 - - self.message(msg="{} {} {} {}".format( - aa, ascore, bscore, bb), - xx=xx, yy=yy, fill='green') - - yy += 0.05 - - if ix in [7, 11, 13]: - xx += .1 - yy = .6 - yinc *= 2 - - final = self.jsf.knockout[-1] - if final.ascore != None: - xx += 0.1 - yy = 0.6 - self.message(msg="{}".format( - final.winner().name), - xx=xx, yy=yy, - fill='gold') - - - - def ball(self, place, fill='red', size=5, xoff=0, yoff=0): - """ Draw a filled circle at place """ - - xx, yy = self.latlon2xy(place) - - self.canvas.create_oval( - xx+xoff-size, - yy+yoff-size, - xx+xoff+size, yy+yoff+size, fill='red') - - async def run(self): - """ Run the waves """ - print('running mexican wave') - - print('spawning jsf') - jsf = await curio.spawn(self.jsf.run) - - score_flashes = await curio.spawn(self.score_flash) - - self.set_background() - - self.beanstalk = beanstalk.BeanStalk() - self.beanstalk.xx = 0.5 - self.beanstalk.yy = 0.5 - self.beanstalk.x = '' - - while True: - self.canvas.delete('all') - - image = self.find_image('1991') - if image: - #print(image) - image = self.load_image(image) - #print(image.size) - image = image.resize((int(self.height), int(self.width))) - #print(image.size, self.width, self.height) - self.beanstalk.image = image - - self.draw() - - # step balls - await self.step_balls() - - #self.jsf.now = self.when() - - # wait for event here. We want to repaint in a minute game time - await curio.sleep(self.sleep) - -def dump(game, out): - - now = datetime.utcnow() - print('dumping') - when = game.when - - if when < now: - return - - print(when.year, when.month, when.day, when.hour, sep=', ', end=', ', file=out) - print(game.a, game.b, 0, 'ko', 0, 0, sep=', ', file=out) - - print(when.year, when.month, when.day, when.hour, sep=', ', end=', ', file=out) - print(game.a, game.b, 45, 'ht', 0, 0, sep=', ', file=out) - - print(when.year, when.month, when.day, when.hour, sep=', ', end=', ', file=out) - print(game.a, game.b, 90, 'ft', 0, 0, sep=', ', file=out) - -def parse_events(events, out=None): - - if out: - out = csv.writer(out) - - for ix, row in enumerate(csv.reader(events)): - - if out: - row = [x.strip() for x in row] - out.writerow(row) - continue - - if not row: - continue - - if row[0].startswith('#'): - continue - - year, month, day, hour = [int(x) for x in row[:4]] - - a, b = row[4], row[5] - - minute = int(row[6]) - what = row[7].strip().lower() - extras = [x.strip().lower() for x in row[8:]] - - kotime = datetime(year, month, day, hour, 0) - when = kotime + timedelta(minutes=minute) - - yield kotime, when, a.lower().strip(), b.lower().strip(), what, extras - - - -def shuffle_events(events, out=None): - - if out: - writer = csv.writer(out) - else: - writer = csv.writer(sys.stdout) - - for row in csv.reader(events): - - row = row[:4] + row[5:7] + row[4:5] + row[7:] - row = [x.strip() for x in row] - writer.writerow(row) - -def name2team(name): - """ Convert string to team object """ - return globals()[name] - - -def whodunnit(extras): - - team = name2team(extras[0]) - - who = int(extras[1]) - og = False - if who > 23: - og = True - who -= 100 - - return team, who, og - - -parser = argparse.ArgumentParser() -parser.add_argument('--nopig', action='store_true') -parser.add_argument('--gallery') -parser.add_argument('--dump') -parser.add_argument('--events') -parser.add_argument('--outfile') -args = parser.parse_args() - -if args.nopig: - sys.exit() - -farm = pigfarm.PigFarm() - -from karmapi.mclock2 import GuidoClock - -xdump = args.dump -if xdump: - xdump = open(args.dump, 'w') - -if args.outfile: - args.outfile = open(args.outfile, 'w') - -if args.events: - args.events = open(args.events) - - #parse_events(args.events, args.outfile) - #sys.exit() - - -farm.add(GuidoClock) -farm.add(MexicanWaves, dict(jsf=jsf, venues=places, gallery=args.gallery, - events=args.events, - dump=xdump)) - -# add a random wc time warper? -curio.run(farm.run(), with_monitor=True) - - diff --git a/karmapi/wc/__init__.py b/karmapi/wc/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/karmapi/wc/base.py b/karmapi/wc/base.py new file mode 100644 index 0000000..548f1af --- /dev/null +++ b/karmapi/wc/base.py @@ -0,0 +1,11 @@ +from random import random, randint +import argparse +import csv +from collections import Counter, defaultdict, deque +from datetime import datetime, timedelta +import calendar +import sys + +import curio + +from karmapi import pigfarm, beanstalk diff --git a/karmapi/wc/events.py b/karmapi/wc/events.py new file mode 100644 index 0000000..9e1a41e --- /dev/null +++ b/karmapi/wc/events.py @@ -0,0 +1,117 @@ +from .base import * + +class GameEvent: + + def __init__(self, when=None, game=None, jsf=None): + + self.when = when + self.game = game + self.jsf = jsf + self.start_evt = curio.Event() + + async def start(self): + + # want to wait appropriate time, for now just 1 + delay = self.jsf.warp(self.when) + try: + await curio.timeout_after(delay, self.start_evt.wait) + except curio.TaskTimeout: + pass + + await self.run() + + async def run(self): + + print('ruunning: ', self.when, self.game) + + + def __str__(self): + + return 'GAMEEVENT ' + str(self.when) + +class CheckPoint(GameEvent): + + async def run(self): + + print('check point: ', self.when, self.game) + + await self.jsf.check_point() + + def __str__(self): + + return 'CHECK POINT ' + str(self.when) + + + +class TeamEvent(GameEvent): + """ An event that involves one team in the game """ + + def __init__(self, team, who=None, when=None, game=None, og=False, **kwargs): + + super().__init__(when, game, **kwargs) + + self.team = team + self.who = who + self.og = og + +class Goal(TeamEvent): + + async def run(self): + + print('goal', self.team, self.when, self.who, self.game, self.og) + # this sort of seems weird + await self.game.goal(self.team, self.who, self.when) + + +class Yellow(TeamEvent): + + async def run(self): + + print('yellow', self.team, self.when, self.who, self.game, self.og) + # this sort of seems weird + await self.game.yellow(self.team, self.who, self.when) + + +class KickOff(GameEvent): + + async def run(self): + + print('ko', self.when, self.game, 'KICK OFF') + await self.game.kick_off(self.jsf) + +class HalfTime(GameEvent): + + async def run(self): + + print(self.when, self.game, 'HALF TIME') + await self.game.half_time() + +class FullTime(GameEvent): + + async def run(self): + + print(self.when, self.game, 'FULL TIME') + await self.game.full_time() + + self.jsf.apres_match(self.game) + + + +class Penalty(Goal): + """ Penalty in a shoot out + + which: which penalty: 1, 2, 3 etc + """ + def __init__(self, team, who=None, when=None, game=None, score=False, **kwargs): + + super().__init__(team, who=who, when=when, game=game, **kwargs) + + print('PEN', self.when, team, score) + + self.score = score + self.penalty = True + + async def run(self): + + await self.game.penalty(self) + diff --git a/karmapi/wc/game.py b/karmapi/wc/game.py new file mode 100644 index 0000000..9c84feb --- /dev/null +++ b/karmapi/wc/game.py @@ -0,0 +1,354 @@ +from .base import * + +class Game: + + NUMBER = 1 + + def __init__(self, a, b, when, where=None, ascore=None, bscore=None): + + self.a = a + self.b = b + self.when = when + self.where = where + self.label = '' + + # ignore ascore/bscore, let events do the work + self.ascore = None + self.bscore = None + + self.apen = [] + self.bpen = [] + + self.minute = 0 + + # flag if score was simulated - do this if game is in the future + self.simulated = self.when > datetime.utcnow() + if self.simulated: + print('SIMULATED', self.simulated, self) + + # this has to go away.. + self.number = Game.NUMBER + Game.NUMBER += 1 + + + def __hash__(self): + + return id(self) + + def reset(self): + """ Reset score if it was random """ + self.ascore = self.bscore = 0 + + self.apen = [] + self.bpen = [] + + self.minute = 0 + + def __str__(self): + + aname = bname = '---' + if self.a: + aname = self.a.name + + if self.b: + bname= self.b.name + + msg = ' '. join(( + str(self.label), + aname, + 'v', + bname, + self.day_name(), + str(self.when), + str(self.where))) + + if self.ascore is not None: + msg += ' ' + '-'.join((str(self.ascore), str(self.bscore))) + + return msg + + def day_name(self): + + return calendar.day_name[self.when.weekday()] + + def __eq__(self, other): + + return self.number == other.number + + def __ne__(self, other): + + return self.number != other.number + + def __gt__(self, other): + + return (self.when, self.number) > (other.when, other.number) + + def __le__(self, other): + + return (self.when, self.number) <= (other.when, other.number) + + def __ge__(self, other): + + return (self.when, self.number) >= (other.when, other.number) + + async def kick_off(self, jsf): + """ Game has kicked off """ + self.reset() + + if not self.simulated: + return + + print('SIMULATING', self) + + minutes = 45 + randint(0, 7) + + await self.half(minutes) + + await self.half_time() + + await self.second_half() + + await self.full_time() + + ko = not self.is_group() + + # knockout match, are we done? + if ko and self.ascore == self.bscore: + + await self.extra_time() + await self.extra_half_time() + await self.extra_full_time() + + if self.ascore == self.bscore: + await self.penalties() + + print('APRES!!!') + jsf.apres_match(self) + + def is_group(self): + + return hasattr(self, 'group') + + async def half(self, minutes): + """ Run a half """ + + for minute in range(minutes): + await self.run_minute() + + + async def run_minute(self): + + yellow_per_minute = 1 / 30 + red_per_minute = 1 / 150 + goals_per_minute = 1 / 30 + + # score a goal? + if random() < goals_per_minute: + # who scored + if random() <= 0.5: + self.ascore += 1 + else: + self.bscore += 1 + + await self.flash(" %dm" % self.minute, fill='green') + + if random() < yellow_per_minute: + # yellow card? + pass + + if random() < red_per_minute: + # red card? + pass + + self.minute += 1 + + return self.ascore, self.bscore + + async def half_time(self): + + await self.flash(fill='blue', tag='HT') + + async def second_half(self): + minutes = 45 + randint(0, 7) + await self.half(minutes) + + async def full_time(self): + + await self.flash(fill='yellow', tag='FT') + + async def extra_time(self): + minutes = 15 + randint(0, 3) + await self.half(minutes) + + async def extra_half_time(self): + pass + + async def extra_full_time(self): + minutes = 15 + randint(0, 3) + await self.half(minutes) + + async def penalties(self): + """ Don't miss this """ + first, second = self.a, self.b + + if random() < 0.5: + first, second = second, first + + total = 0 + done = False + while not done: + done = self._penalty(first) + first, second = second, first + + def _penalty(self, team): + """ Simulate a penalty """ + which = len(self.apen) + len(self.bpen) + + if random() < 0.5: + pen = Penalty(team, score=True, game=self, + when=self.when + timedelta(minutes=120 + which), + who = randint(1, 23)) + + if team is self.a: + self.apen.append(pen) + else: + self.bpen.append(pen) + + return self.all_over() + + async def penalty(self, pen): + + if pen.team is self.a: + self.apen.append(pen) + else: + self.bpen.append(pen) + + def pens_score(self): + """ score in penalties """ + apens = [x for x in self.apen if x.score] + bpens = [x for x in self.bpen if x.score] + + return len(apens), len(bpens) + + + def all_over(self): + """ Are the pens done? """ + + a, b = self.pens_score() + + if a == b: + return False + + aa = len(self.apen) + bb = len(self.bpen) + + which = aa + bb + + if which <= 10: + aleft = 5 - aa + bleft = 5 - bb + + else: + aleft = bleft = 0 + + if aa < bb: + aleft = 1 + if bb < aa: + bleft = 1 + + if b > a + aleft: + return True + + if a > b + bleft: + return True + + async def goal(self, team, who=None, when=None): + + if team is self.a: + self.ascore += 1 + else: + self.bscore += 1 + + minute = int((when - self.when).total_seconds() / 60) + await self.flash(" %dm" % minute, fill='green') + + + async def yellow(self, team, who=None, when=None): + + if team is self.a: + self.a.yellow += 1 + else: + self.b.yellow += 1 + + minute = int((when - self.when).total_seconds() / 60) + await self.flash(" %dm" % minute, fill='purple') + + + async def red(self, team, who=None, when=None): + pass + + async def sub(self, team, off=None, on=None, when=None): + pass + + def apres_match(self): + + a = self.a + b = self.b + + a.goals += self.ascore + b.goals += self.bscore + + a.against += self.bscore + b.against += self.ascore + + if self.is_group(): + + if self.ascore > self.bscore: + a.points += 3 + + elif self.bscore > self.ascore: + b.points += 3 + + else: + a.points += 1 + b.points += 1 + + async def flash(self, tag='', fill='red', card=False): + + a = self.a + b = self.b + ascore = self.ascore + bscore = self.bscore + if self.apen: + aa, bb = self.pens_score() + ascore = "%d(%d)" % (self.ascore, aa) + bscore = "%d(%d)" % (self.bscore, bb) + + msg = a.name + ' ' + str(ascore) + ' ' + str(bscore) + ' ' + b.name + msg += ' ' + tag + + when = self.when + timedelta(minutes=self.minute) + await self.events.put(dict(where=self.where, msg=msg, yoff=-90, + when=when, fill=fill, card=card)) + + def winner(self): + """ Return winning team """ + if self.ascore > self.bscore: + return self.a + elif self.bscore > self.ascore: + return self.b + + # penalties + aa, bb = self.pens_score() + if aa > bb: + return self.a + + return self.b + + def loser(self): + + win = self.winner() + if win == self.a: + return self.b + + return self.a diff --git a/karmapi/wc/group.py b/karmapi/wc/group.py new file mode 100644 index 0000000..7459b73 --- /dev/null +++ b/karmapi/wc/group.py @@ -0,0 +1,58 @@ +class Group: + + def __init__(self, teams=None, games=None): + + self.teams = teams + self.games = games or [] + self.played = 0 + + def winner(self): + """ Pick a winner """ + return self.get_table()[0] + + def second(self): + """ Pick a second """ + return self.get_table()[1] + + def is_finished(self): + + size = len(self.teams) + return self.played == (size * (size - 1)) / 2 + + def __str__(self): + + return str(self.teams, self.games) + + def reset(self): + """ reset for a new run """ + for game in self.games: + game.reset() + + for team in self.teams: + team.reset() + + self.played = 0 + + + def table(self): + """ Show the group table """ + teams = self.get_table() + + for team in teams: + print(team) + print(team.statto) + + + def get_table(self): + """ Return teams sorted per table """ + teams = list(self.teams) + + teams = sorted(teams, key=self.tablesort) + + return list(reversed(teams)) + + def tablesort(self, key): + """ Order teams """ + return key.points, key.goals - key.against, key.goals, -1 * key.yellow + + diff --git a/karmapi/wc/jsf.py b/karmapi/wc/jsf.py new file mode 100644 index 0000000..5885cf2 --- /dev/null +++ b/karmapi/wc/jsf.py @@ -0,0 +1,417 @@ +from .base import * +from .events import * +from .game import Game + +class JeuxSansFrontieres: + """ The knockout stage. + + Winners and seconds from group stage come through into a + last 16 grid that looks something like this: + + + wa rb + wc rd w w w w w w W r + + we rf w w + wg rh + + wb ra w w w w s s T f + wd rc + + wf re w w + wh rg + + with abcdefgh + and badcfehg + + + So lets set it up so we can do: + + * simulate groups + * do draw for knockout stage + * get games for final stage + + """ + def __init__(self, groups, places=None, dates=None, + when=None, game_events=None, name2team=None): + self.groups = groups + + # places and dates for knockout stage + self.places = places + self.dates = dates + self.name2team = name2team + + self.when = when or datetime(2018, 6, 14) + self.start = self.when + + self.start_time = datetime.utcnow() + + # factor to warp time by + self.timewarp = 10 / (30 * 24 * 60 * 60) + self.sleep = 0.01 + + self.knockout = [] + self.winners = {} + self.seconds = {} + + self.events = curio.UniversalQueue() + + self.game_events = game_events or [] + + self.tasks = [] + + def warp(self, when): + """ convert when to a delay in seconds """ + start = self.start + seconds = (when - start).total_seconds() + + # how far are we in? + elapsed = (datetime.utcnow() - self.start_time).total_seconds() + + warp = (seconds * self.timewarp) - elapsed + return warp + + def iwarp(self, ticks): + """ convert tick time to a datetime """ + return self.start + timedelta(seconds=ticks / self.timewarp) + + + def match_game(self, key): + + when, ateam, bteam = key + + # build game lookup + gl = {} + for game in self.generate_games(): + game.events = self.events + + aname = bname = '-' + if game.a: + aname = game.a.name.lower() + bname = game.b.name.lower() + + gkey = (game.when, aname, bname) + if gkey in gl: + raise ValueError("Duplicate game key %s" % str(key)) + gl[gkey] = game + + # Now find the game for this key + game = gl.get(key) + + if game is None: + game = gl.get((key[0], '-','-')) + + return game + + + async def dispatch_events(self): + """ Dispatch events to the appropriate game """ + + if not self.game_events: + return + + knockout = [] + etasks = [] + for event in self.game_events: + + kotime, when, ateam, bteam, what, extras = event + + key = kotime, ateam, bteam + + game = self.match_game(key) + + if not game: + knockout.append((key, event)) + continue + + # turn team names into teams + ateam = self.name2team(ateam) + bteam = self.name2team(bteam) + + # got the game. now create an appropriate event + if what == 'goal': + team, who, og = self.whodunnit(extras) + event = Goal(team, who, when, game, og, jsf=self) + task = await curio.spawn(event.start) + etasks.append(task) + + elif what == 'yellow': + team, who, og = self.whodunnit(extras) + event = Yellow(team, who, when, game, jsf=self) + task = await curio.spawn(event.start) + etasks.append(task) + + + elif what == 'ko': + event = KickOff(when, game, jsf=self) + task = await curio.spawn(event.start) + etasks.append(task) + + elif what == 'penalty': + team, who, og = self.whodunnit(extras) + + score = int(extras[-1]) != 0 + + event = Penalty(team, who, when, game, score, jsf=self) + task = await curio.spawn(event.start) + etasks.append(task) + + elif what == 'ft': + + event = FullTime(when, game, jsf=self) + task = await curio.spawn(event.start) + etasks.append(task) + + else: + # just print out the event info + print('*****', when, ateam, bteam, what, extras) + + self.tasks += etasks + + + async def load_group_games(self): + """ Put the group games into the game queue """ + + kos = [] + + for label, group in self.groups.items(): + group.name = label + group.reset() + for game in group.games: + game.group = group + game.label = label.upper() + + game.a.games.append(game) + game.b.games.append(game) + + if game.simulated: + kos.append(KickOff(game.when, game, jsf=self)) + + self.its_a_knockout() + + await self.dispatch_events() + + for game in self.knockout: + game.events = self.events + if game.simulated: + kos.append(KickOff(game.when, game, jsf=self)) + + kotasks = [] + for ko in kos: + task = await curio.spawn(ko.start) + kotasks.append(task) + + self.tasks += kotasks + + + def its_a_knockout(self): + """ Set up knockout stage """ + self.knockout = [] + Game.NUMBER = 49 + + places = self.places or (['???'] * len(games)) + dates = self.dates or [datetime.today()] * len(games) + + for where, when in zip(places, dates): + self.knockout.append(Game(None, None, when, where)) + + groups = self.groups + key = sorted(groups.keys()) + + key = list(key) + + key2 = '' + for x in range(0, len(key), 2): + key2 += key[x+1] + key[x] + + games = [] + + ix = 0 + for gps in key, key2: + for x in range(0, len(key), 2): + + a = gps[x] + b = gps[x+1] + + self.winners[a] = self.knockout[ix], 'a' + self.seconds[b] = self.knockout[ix], 'b' + ix += 1 + + # now do knockout stage + ko = self.knockout + for ix, game in enumerate(ko[:8]): + gix = 8 + int(ix / 2) + if ix % 2 == 0: + self.winners[game.number] = self.knockout[gix], 'a' + else: + self.winners[game.number] = self.knockout[gix], 'b' + + for ix, game in enumerate(ko[8:12]): + gix = 12 + int(ix / 2) + if ix % 2 == 0: + self.winners[game.number] = self.knockout[gix], 'a' + else: + self.winners[game.number] = self.knockout[gix], 'b' + + for ix, game in enumerate(ko[12:14]): + if ix % 2 == 0: + self.winners[game.number] = self.knockout[15], 'a' + self.seconds[game.number] = self.knockout[14], 'b' + else: + self.winners[game.number] = self.knockout[15], 'b' + self.seconds[game.number] = self.knockout[14], 'a' + + + + def generate_teams(self): + """ Generate teams """ + for group in self.groups.values(): + for team in group.teams: + yield team + + def generate_games(self): + """ Generate games """ + games = set() + + for team in self.generate_teams(): + for game in team.games: + games.add(game) + + games.update(self.knockout) + + for game in sorted(games): + yield game + + + def apres_match(self, game): + """ Deal with updating of knockout stage """ + + game.apres_match() + + if game.number == 63: + print('third place:', game.winner()) + return + if game.number == 64: + print('Winner:', game.winner()) + return + + + if game.is_group(): + group = game.group + group.played += 1 + + game.a.played += 1 + game.b.played += 1 + + key = game.label.lower() + kgame, label = self.winners[key] + wteam = group.winner() + setattr(kgame, label, wteam) + if group.is_finished(): + wteam.games.append(kgame) + + kgame, label = self.seconds[key] + steam = group.second() + setattr(kgame, label, steam) + if group.is_finished(): + steam.games.append(kgame) + + for team in group.teams: + if team not in (wteam, steam): + print('out', team) + team.go_home() + + else: + kgame, label = self.winners[game.number] + wteam = game.winner() + + setattr(kgame, label, wteam) + print('knockout winner:', wteam, game, kgame) + wteam.games.append(kgame) + + if game.number in self.seconds: + kgame, label = self.seconds[game.number] + lteam = game.loser() + setattr(kgame, label, lteam) + lteam.games.append(kgame) + else: + game.loser().go_home() + + + async def reset(self): + """ Reset things to start again """ + for task in self.tasks: + await task.cancel() + + self.now = self.start + self.start_time = datetime.utcnow() + Game.NUMBER -= len(self.knockout) + + self.knockout = [] + self.winners = {} + self.seconds = {} + + await self.load_group_games() + + async def run(self): + """ Run the games + + run the group stage + + generate knockout bracket + + run knockout + + collect stats + + reset + + AND/OR: + + Generate events. + """ + print('jsf: run start') + await self.reset() + + if self.dump: + for game in self.generate_games(): + dump(game, self.dump) + + self.dump.close() + sys.exit(0) + + return + + + + def whodunnit(self, extras): + + team = self.name2team(extras[0]) + + who = int(extras[1]) + og = False + if who > 23: + og = True + who -= 100 + + return team, who, og + + +def dump(game, out): + + now = datetime.utcnow() + print('dumping') + when = game.when + + if when < now: + return + + print(when.year, when.month, when.day, when.hour, sep=', ', end=', ', file=out) + print(game.a, game.b, 0, 'ko', 0, 0, sep=', ', file=out) + + print(when.year, when.month, when.day, when.hour, sep=', ', end=', ', file=out) + print(game.a, game.b, 45, 'ht', 0, 0, sep=', ', file=out) + + print(when.year, when.month, when.day, when.hour, sep=', ', end=', ', file=out) + print(game.a, game.b, 90, 'ft', 0, 0, sep=', ', file=out) + diff --git a/karmapi/wc/mexwave.py b/karmapi/wc/mexwave.py new file mode 100644 index 0000000..d2fdffd --- /dev/null +++ b/karmapi/wc/mexwave.py @@ -0,0 +1,433 @@ + +from .base import * + +# add a PI Gui? +class MexicanWaves(pigfarm.Yard): + + def __init__(self, parent, jsf=None, venues=None, gallery='.', + dump=None, events=None): + """ Initialise the thing """ + + super().__init__(parent) + + self.jsf = jsf + self.jsf.dump = dump + + if events: + events = list(parse_events(events)) + + self.jsf.game_events = events + + self.messages = [] + + self.start_time = datetime.utcnow() + + # teleprinter location + self.teleprint_xxyy = .85, .425 + self.teleprints = [] + + self.scan_venues(venues) + + self.add_event_map('r', self.reset) + self.add_event_map('S', self.slower) + self.add_event_map('M', self.faster) + self.add_event_map('m', self.toggle_show_games) + self.add_event_map('g', self.toggle_show_groups) + self.add_event_map('t', self.toggle_show_teams) + self.add_event_map('j', self.previous_group) + self.add_event_map('k', self.next_group) + #self.add_event_map(' ', self.toggle_pause) + + self.game_view = False + self.team_view = False + self.group_view = False + self.which_group = 0 + + + async def slower(self): + """ Go through time more slowly """ + self.jsf.timewarp *= 2 + + async def faster(self): + """ Go through time more quickly """ + self.jsf.timewarp /= 2 + + async def toggle_show_games(self): + """ Toggle matches view """ + self.game_view = not self.game_view + + async def toggle_show_teams(self): + """ Toggle teams view """ + self.game_view = not self.team_view + + async def toggle_show_groups(self): + """ Toggle groups view """ + self.group_view = not self.group_view + + async def next_group(self): + """ Go to next group """ + self.which_group += 1 + + if self.which_group == len(self.jsf.groups): + self.which_group = 0 + + async def previous_group(self): + """ Go to previous group """ + self.which_group -= 1 + + if self.which_group < 0: + self.which_group += len(self.jsf.groups) + + + def scan_venues(self, venues): + """ Set the lat lon bounds for the canvas """ + self.places = places = list(venues.values()) + + minlat = min(x.lat for x in places) + maxlat = max(x.lat for x in places) + + minlon = min(x.lon for x in places) + maxlon = max(x.lon for x in places) + + height = maxlat - minlat + width = maxlon - minlon + + wpad = width / 8 + hpad = height / 8 + + # need to add padding to make grid + self.xx = minlon - wpad + self.yy = minlat - hpad + + self.xscale = width + (2 * wpad) + self.yscale = height + (2 * hpad) + + + def latlon2xy(self, place): + """ Convert lat lon to yard coordinates """ + lat = place.lat + lon = place.lon + + xx = int(((lon - self.xx) / self.xscale) * self.width) + yy = self.height - int(((lat - self.yy) / self.yscale) * self.height) + + return xx, yy + + + async def step_balls(self): + """ do something here """ + + for place in self.places: + size = 5 + self.ball(place, fill='red', size=5) + + self.message(place.name, place, yoff=-20, fill='yellow') + + locations = defaultdict(list) + + for team in self.jsf.generate_teams(): + + wtit = self.what_time_is_it() + team.where(wtit) + xx, yy = self.latlon2xy(team) + + locations[(xx, yy)].append(team) + + # Now draw the things + for key in locations.keys(): + xx, yy = key + yoff = 30 + for team in locations[key]: + self.message(team.name, team, yoff=yoff, fill='green') + + yoff += 30 + + self.show_score_flashes() + + if self.game_view: + self.show_games() + + if self.team_view: + self.show_teams() + + if self.group_view: + self.show_groups() + + if not self.group_view and not self.team_view and not self.game_view: + self.show_tables() + + self.show_knockout() + + + def what_time_is_it(self): + + elapsed = (datetime.utcnow() - self.start_time).total_seconds() + + return self.jsf.iwarp(elapsed) + + + def draw(self): + + import time + self.beanstalk.create_time = time.time() + + self.beanstalk.draw(self.canvas, self.width, self.height, 'red') + + async def reset(self): + """ Reset timer """ + self.start_time = datetime.utcnow() + + self.messages = [] + self.teleprints =[] + + await self.jsf.reset() + #await self.jsf.load_group_games() + + + async def score_flash(self): + + while True: + info = await self.jsf.events.get() + + self.messages.append(info) + + self.teleprint(**info) + + + def show_score_flashes(self): + """ Show the score flashes """ + xx, yy = self.teleprint_xxyy + + for msg, fill in self.teleprints: + + self.message(msg=msg, fill=fill, xx=xx, yy=yy) + xx, yy = xx, yy + .025 + + # Now do messages + keep = {} + for info in reversed(self.messages): + when = info['when'] + + if self.what_time_is_it() < when + timedelta(hours=48): + pos = self.layout(**info) + if pos in keep: + continue + keep[pos] = info + + self.message(**info) + + self.messages = list(keep.values()) + + + def teleprint(self, msg=None, fill='orange', **kwargs): + """ teleprinter messages """ + self.teleprints.append((msg, fill)) + + if len(self.teleprints) > 10: + del self.teleprints[0] + + def layout(self, where=None, xx=None, yy=None, **kwargs): + """ layout for location """ + if xx is None or yy is None: + xx, yy = self.latlon2xy(where) + else: + xx *= self.width + yy *= self.height + + return xx, yy + + + def message(self, msg=None, where=None, fill='red', size=5, xoff=0, yoff=0, + xx=None, yy=None, **kwargs): + """ Message from a place """ + + xx, yy = self.layout(where, xx, yy) + + self.canvas.create_text((xx + xoff, yy + yoff), text=msg, fill=fill) + + + def show_tables(self): + + position = [ + [.10, .1], + [.25, .1], + + [.10, .25], + [.25, .25], + + [.75, .75], + [.90, .75], + + [.75, .9], + [.90, .9], + ] + + for label, group in self.jsf.groups.items(): + + gindex = ord(label) - ord('a') + + xx, yy = position[gindex] + + for team in group.get_table()[::-1]: + self.message( + msg=team.statto(), + xx=xx, + yy=yy, + fill='cyan') + yy -= 0.025 + + def show_groups(self): + + xx = 0.6 + yy = 0.05 + + which = chr(self.which_group + ord('a')) + + group = self.jsf.groups[which] + + for game in group.games: + + self.message(msg=str(game), + xx=xx, yy=yy, fill='magenta') + + yy += 0.025 + + def show_teams(self): + + pass + + + def show_games(self): + + xx = 0.2 + yy = 0.05 + + for game in self.jsf.generate_games(): + self.message(msg=str(game), + xx=xx, yy=yy, fill='pink') + + yy += 0.025 + + def show_knockout(self): + + if not self.jsf.knockout: + return + xx = .1 + yy = .6 + yinc = 0.025 + for ix, game in enumerate(self.jsf.knockout): + aa = game.a or ' ' + bb = game.b or ' ' + + ascore = game.ascore + bscore = game.bscore + if ascore is None: ascore = '-' + if bscore is None: bscore = '-' + + elif ascore == bscore: + apen, bpen = game.pens_score() + ascore += apen / 10 + bscore += bpen / 10 + + self.message(msg="{} {} {} {}".format( + aa, ascore, bscore, bb), + xx=xx, yy=yy, fill='green') + + yy += 0.05 + + if ix in [7, 11, 13]: + xx += .1 + yy = .6 + yinc *= 2 + + final = self.jsf.knockout[-1] + if final.ascore != None: + xx += 0.1 + yy = 0.6 + self.message(msg="{}".format( + final.winner().name), + xx=xx, yy=yy, + fill='gold') + + + + def ball(self, place, fill='red', size=5, xoff=0, yoff=0): + """ Draw a filled circle at place """ + + xx, yy = self.latlon2xy(place) + + self.canvas.create_oval( + xx+xoff-size, + yy+yoff-size, + xx+xoff+size, yy+yoff+size, fill='red') + + async def run(self): + """ Run the waves """ + print('running mexican wave') + + print('spawning jsf') + jsf = await curio.spawn(self.jsf.run) + + score_flashes = await curio.spawn(self.score_flash) + + self.set_background() + + self.beanstalk = beanstalk.BeanStalk() + self.beanstalk.xx = 0.5 + self.beanstalk.yy = 0.5 + self.beanstalk.x = '' + + while True: + self.canvas.delete('all') + + image = self.find_image('1991') + if image: + #print(image) + image = self.load_image(image) + #print(image.size) + image = image.resize((int(self.height), int(self.width))) + #print(image.size, self.width, self.height) + self.beanstalk.image = image + + self.draw() + + # step balls + await self.step_balls() + + #self.jsf.now = self.when() + + # wait for event here. We want to repaint in a minute game time + await curio.sleep(self.sleep) + + +def parse_events(events, out=None): + + if out: + out = csv.writer(out) + + for ix, row in enumerate(csv.reader(events)): + + if out: + row = [x.strip() for x in row] + out.writerow(row) + continue + + if not row: + continue + + if row[0].startswith('#'): + continue + + year, month, day, hour = [int(x) for x in row[:4]] + + a, b = row[4], row[5] + + minute = int(row[6]) + what = row[7].strip().lower() + extras = [x.strip().lower() for x in row[8:]] + + kotime = datetime(year, month, day, hour, 0) + when = kotime + timedelta(minutes=minute) + + yield kotime, when, a.lower().strip(), b.lower().strip(), what, extras + diff --git a/karmapi/wc/place.py b/karmapi/wc/place.py new file mode 100644 index 0000000..8291e27 --- /dev/null +++ b/karmapi/wc/place.py @@ -0,0 +1,11 @@ + + +class Place: + + def __str__(self): + + return self.name + + def __repr__(self): + + return str(self) diff --git a/karmapi/wc/team.py b/karmapi/wc/team.py new file mode 100644 index 0000000..5f5d8d1 --- /dev/null +++ b/karmapi/wc/team.py @@ -0,0 +1,143 @@ +from .base import * + +squadsize = 23 +n = 32 + +class Team: + + def __init__(self, name=None, win=None): + """ Init the team with no name? """ + self.name = name + + # default location: North Pole + self.lat = 90 + self.lon = 0 + + self.win = win or 1 / n + self.home = False + + self.reset() + + + def reset(self): + + self.points = 0 + self.played = 0 + self.yellow = 0 + self.red = 0 + self.goals = 0 + self.against = 0 + self.home = None + + # Keep track of games played/to be played? + self.games = [] + + self.load_squad() + + def load_squad(self): + """ Numbers 1 to sqadsize """ + self.squad = defaultdict(int) + + for player in range(squadsize): + self.squad[player] = Player(player + 1) + + def where(self, when): + """ Where is the team? """ + + if self.home is not None: + self.lat, self.lon = self.home.lat, self.home.lon + return self.lat, self.lon + + last_game = None + next_game = None + for game in self.games: + if game.when < when: + last_game = game + else: + next_game = game + break + + if last_game is None and next_game is None: + # return a defualt? + return self.lat, self.lon + + # if one is missing, use the other + last_game = last_game or next_game + next_game = next_game or last_game + + # Interpolate based on time + self.lat, self.lon = warp(last_game, next_game, when) + + return self.lat, self.lon + + def go_home(self): + + self.home = NorthPole() + + def __str__(self): + + return self.name + + + def stats(self): + + return dict( + played = self.played, + points = self.points, + goals = self.goals, + against = self.against, + goal_delta = self.goals - self.against, + red = self.red, + yellow = self.yellow) + + def statto(self): + """ Return line of stats for the team """ + + stats = self.stats() + msg = "%s" % self.name + msg += " {played:4d}".format(**stats) + msg += " {points:4d} {goal_delta:4d}".format(**stats) + msg += " {goals:4d} {against:4d}".format(**stats) + + return msg + + +class Player: + """ A player of class + + Tony Currie, Kyle Walker, Harry Maguire + """ + + def __init__(self, number): + + self.goals = [] + self.red = [] + self.yellow = [] + self.number = number + + +def warp(a, b, when): + """ Interpolate between a and b based on time """ + + delta_t = (b.when - a.when).total_seconds() + + if delta_t == 0: + return a.where.lat, a.where.lon + + delta_w = (when - a.when).total_seconds() + + frac = delta_w / delta_t + + aa = a.where + bb = b.where + + lat = aa.lat + lon = aa.lon + + lat += frac * (bb.lat - aa.lat) + lon += frac * (bb.lon - aa.lon) + + return lat, lon + + + diff --git a/karmapi/wc/wc.py b/karmapi/wc/wc.py new file mode 100644 index 0000000..21551e4 --- /dev/null +++ b/karmapi/wc/wc.py @@ -0,0 +1,160 @@ +""" World Cup + +Over the years I've done a few world cup predict the scores things. + +There's another one coming so here we go. + +Eight groups of four. + +And six games per group. + +Will likely turn into a simulation of errors. + +Prior? probabilities for games.. aim it to predict first and second in each +group for now as those will be the ones that get there. + +Things to include maybe... factors for order games are played. + +Oh and stuff like what will be going on at home by June 2018. + +Russia are the hosts, and I understand have graciously offered to represent the +USA and Italy too, sorry you couldn't make the party. + +Seek Irish, Scots or English for advice on how to survive when your team is not +there. + +All times are UTC and subject to typos and other delights. + +The story so far. + +It's December 2017. World Cup finals draw in Russia is out. + +Italy and USA are already out. Sweden eliminated Italy and the USA story is more complex. + +On the Mueller advent calendar Michael Flynn pleaded guilty on the 1st. + +Picture wasn't clear on the 2nd. 3-4 maybe more faces? + +Back to the world cup. + +Group A. + +rus sau egy urg + + +OK.. back from the fixture lists. + +Order of games interesting and need to add places. Fair bit of moving around +in some groups. + +Some teams get to play after seeing the other game in their group in first two +rounds of games. + +As groups progress teams will be looking at what comes next, if they have a +couple of wins, or otherwise just how to get out of the group. + +Seeding has placed the teams with higher FIFA rankings with potentially less +travel complications, but then there are the fans back home and time zone +considerations. + +Now it is 2017 so there may be an obligatory block chain connection, but if so +it well be super low tech. + +And simulations. For now stuck deciding what to simulate.. oh and priors.. + +I think we may need some events here soon. + +Back to the coding. So rule 0: keep it under 1000 lines, bonus marks under +500. World cup rules, so you decide how to count. + +Subtracting docstrings there should be a lot less. And with luck sphinx will +magically turn the code into ok docs. + +rule 1: there is no rule one. It's the world cup, so breaking all the coding +rules. See also counting lines of code, world cup style. + +Or rather just writing what seems easiest at the time. + +There is a fair bit of going round in circles: check the commit log see git. + +Ok.. back to the football. + +The world cup mixes up 32 teams from around the world. The final draw mixes +everything up and there are some fascinating match ups. + +Simon Kuiper, football anthropologist?, wrote a fascinating book about matches +between countries, places that had been at war in the very recent past. Many +of the games covered were at world cups or big football federation finals. + +Others were just qualifying games. + +Sources: Wikipedia and scriblings on beer mats. + +Places coming along. + +Rostov-on-Don. Lots of twin towns, including Toronto. + +Some interesting games there too. + +545km to the south + +Simulations +=========== + +Run the code and you get a draw for the last 16. + +I am starting to simulate the first round games with 4 bottles in a pool. It's +like Paul the octobpus, but not quite so scientific. Or maybe it is? + +eng tun bel and pan played already. See Game's for results. + + +""" + +from .jsf import JeuxSansFrontieres +from .mexwave import MexicanWaves + +# break with tradition and import * +from .base import * +from .wc2018 import * + + +parser = argparse.ArgumentParser() +parser.add_argument('--nopig', action='store_true') +parser.add_argument('--gallery') +parser.add_argument('--dump') +parser.add_argument('--events') +parser.add_argument('--outfile') +args = parser.parse_args() + +if args.nopig: + sys.exit() + +farm = pigfarm.PigFarm() + +from karmapi.mclock2 import GuidoClock + +xdump = args.dump +if xdump: + xdump = open(args.dump, 'w') + +if args.outfile: + args.outfile = open(args.outfile, 'w') + +if args.events: + args.events = open(args.events) + + #parse_events(args.events, args.outfile) + #sys.exit() + + +farm.add(GuidoClock) +farm.add(MexicanWaves, dict(jsf=jsf, venues=places, gallery=args.gallery, + events=args.events, + dump=xdump)) + +# add a random wc time warper? +curio.run(farm.run(), with_monitor=True) + + + diff --git a/karmapi/wc/wc2018.py b/karmapi/wc/wc2018.py new file mode 100644 index 0000000..b7f7bbd --- /dev/null +++ b/karmapi/wc/wc2018.py @@ -0,0 +1,580 @@ +""" World Cup + +Over the years I've done a few world cup predict the scores things. + +There's another one coming so here we go. + +Eight groups of four. + +And six games per group. + +Will likely turn into a simulation of errors. + +Prior? probabilities for games.. aim it to predict first and second in each +group for now as those will be the ones that get there. + +Things to include maybe... factors for order games are played. + +Oh and stuff like what will be going on at home by June 2018. + +Russia are the hosts, and I understand have graciously offered to represent the +USA and Italy too, sorry you couldn't make the party. + +Seek Irish, Scots or English for advice on how to survive when your team is not +there. + +All times are UTC and subject to typos and other delights. + +The story so far. + +It's December 2017. World Cup finals draw in Russia is out. + +Italy and USA are already out. Sweden eliminated Italy and the USA story is more complex. + +On the Mueller advent calendar Michael Flynn pleaded guilty on the 1st. + +Picture wasn't clear on the 2nd. 3-4 maybe more faces? + +Back to the world cup. + +Group A. + +rus sau egy urg + + +OK.. back from the fixture lists. + +Order of games interesting and need to add places. Fair bit of moving around +in some groups. + +Some teams get to play after seeing the other game in their group in first two +rounds of games. + +As groups progress teams will be looking at what comes next, if they have a +couple of wins, or otherwise just how to get out of the group. + +Seeding has placed the teams with higher FIFA rankings with potentially less +travel complications, but then there are the fans back home and time zone +considerations. + +Now it is 2017 so there may be an obligatory block chain connection, but if so +it well be super low tech. + +And simulations. For now stuck deciding what to simulate.. oh and priors.. + +I think we may need some events here soon. + +Back to the coding. So rule 0: keep it under 1000 lines, bonus marks under +500. World cup rules, so you decide how to count. + +Subtracting docstrings there should be a lot less. And with luck sphinx will +magically turn the code into ok docs. + +rule 1: there is no rule one. It's the world cup, so breaking all the coding +rules. See also counting lines of code, world cup style. + +Or rather just writing what seems easiest at the time. + +There is a fair bit of going round in circles: check the commit log see git. + +Ok.. back to the football. + +The world cup mixes up 32 teams from around the world. The final draw mixes +everything up and there are some fascinating match ups. + +Simon Kuiper, football anthropologist?, wrote a fascinating book about matches +between countries, places that had been at war in the very recent past. Many +of the games covered were at world cups or big football federation finals. + +Others were just qualifying games. + +Sources: Wikipedia and scriblings on beer mats. + +Places coming along. + +Rostov-on-Don. Lots of twin towns, including Toronto. + +Some interesting games there too. + +545km to the south + +Simulations +=========== + +Run the code and you get a draw for the last 16. + +I am starting to simulate the first round games with 4 bottles in a pool. It's +like Paul the octobpus, but not quite so scientific. Or maybe it is? + +eng tun bel and pan played already. See Game's for results. + +""" +from .base import * + + +from .jsf import JeuxSansFrontieres +from .game import Game +from .group import Group +from .team import Team +from .place import Place + + +class Moscow(Place): + """ Final """ + + name = 'Moscow Luzhniki' + lat = 55 + (45 / 60) + lon = 37 + (37 / 60) + +class Spartak(Place): + """ Spartak Moscow """ + + name = 'Moscow Oktkrytiye' + lat = 57 + (49 / 60) + lon = 34 + (26 / 60) + + xlat = 55 + (49 / 60) + xlon = 37 + (26 / 60) + + +class StPetersberg(Place): + """ Place of many names """ + + name = 'St Petersberg' + lat = 59 + (58 / 60) + lon = 30 + (14 / 60) + +class Volgograd(Place): + """ Down south """ + + name = 'Volgograd' + lat = 48 + (45 / 60) + lon = 44 + (33 / 60) + +class Novgorod(Place): + """ Central """ + + name = 'Nizhny Novgorod' + lat = 56 + (20 / 60) + lon = 43 + (57 / 60) + +class Kaliningrad(Place): + """ North West port """ + + name = 'Kaliningrad' + lat = 54 + (42 / 60) + lon = 20 + (32 / 60) + +class RostovOnDon(Place): + """ Sheffield in Russia """ + name = "Rostov-on-Don" + lat = 47 + (13 / 60) + lon = 39 + (44 / 60) + +class Kazan(Place): + """ + + https://tools.wmflabs.org/geohack/geohack.php? + + pagename=Kazan_Arena& + + params=55_49_14.3_N_49_9_40.0_E_type:landmark """ + + name = 'Kazan' + lat = 55 + (49 / 60) + (14.3 / 3600) + lon = 49 + (9 / 60) + (40.0 / 3600) + +class Samara(Place): + """ """ + + name = 'Samara' + lat = 53 + (17 / 60) + lon = 10 + (14 / 60) + +class Yekaterinburg(Place): + """ """ + + name = 'Central Stadium' + lat = 56 + (50 / 60) + lon = 60 + (34 / 60) + +class Saransk(Place): + """ """ + + name = 'Mordovia Arena' + lat = 54 + (11 / 60) + lon = 45 + (12 / 60) + +class Sochi(Place): + """ """ + + name = 'Fisht Olympic Stadium' + lat = 43 + (24 / 60) + lon = 39 + (57 / 60) + +class NorthPole(Place): + """ Where teams go when out? """ + + name = 'North Pole' + lat = 90 + lon = 0 + + + +places = dict( + + moscow=Moscow(), + spartak=Spartak(), + stpetersberg=StPetersberg(), + + kaliningrad=Kaliningrad(), + + novgorod=Novgorod(), + yekaterinburg=Yekaterinburg(), + kazan=Kazan(), + saransk=Saransk(), + samara=Samara(), + + volgograd=Volgograd(), + rostovondon=RostovOnDon(), + sochi=Sochi(), + ) + +# Group A +rus = Team('RUS') +sau = Team('SAU') +egy = Team('EGY') +urg = Team('URG') + +# Group B +por = Team('POR') +spa = Team('SPA') +mor = Team('MOR') +ira = Team('IRA') + +# group C +fra = Team('FRA') +aus = Team('AUS') +per = Team('PER') +den = Team('DEN') + +# group D +arg = Team('ARG') +ice = Team('ICE') +cro = Team('CRO') +nig = Team('NIG') + +# group E +bra = Team('BRA') +swi = Team('SWI') +crc = Team('CRC') +ser = Team('SER') + +# group F +ger = Team('GER') +swe = Team('SWE') +mex = Team('MEX') +sko = Team('SKO') + +# group G +bel = Team('BEL') +pan = Team('PAN') +tun = Team('TUN') +eng = Team('ENG') + +# group H +pol = Team('POL') +sen = Team('SEN') +col = Team('COL') +jap = Team('JAP') + + +groups = dict( + a=Group(teams = [rus, sau, egy, urg], + games = [ + Game(rus, sau, datetime(2018, 6, 14, 15, 0), + where=places['moscow'], + ascore=5, bscore=0), + + Game(egy, urg, datetime(2018, 6, 15, 12, 0), + where=places['yekaterinburg'], + ascore=0, bscore=1), + + + Game(rus, egy, datetime(2018, 6, 19, 18, 0), + where=places['stpetersberg'], + ascore=3, bscore=1), + + Game(urg, sau, datetime(2018, 6, 20, 15, 0), + where=places['rostovondon'], + ), + + + Game(urg, rus, datetime(2018, 6, 25, 14, 0), + where=places['samara'], + ), + Game(sau, egy, datetime(2018, 6, 25, 14, 0), + where=places['volgograd'], + ), + ]), + + b=Group(teams = [por, spa, mor, ira], + games = [ + Game(mor, ira, datetime(2018, 6, 15, 15, 0), + where=places['stpetersberg'], + ascore=0, bscore=1), + + Game(por, spa, datetime(2018, 6, 15, 18, 0), + where=places['sochi'], + ascore=3, bscore=3), + + + Game(por, mor, datetime(2018, 6, 20, 12, 0), + where=places['moscow'], + ), + Game(ira, spa, datetime(2018, 6, 20, 18, 0), + where=places['kazan'], + ), + + Game(ira, por, datetime(2018, 6, 25, 18, 0), + where=places['saransk'], + ), + Game(spa, mor, datetime(2018, 6, 25, 18, 0), + where=places['kaliningrad'], + ), + ]), + + c=Group(teams = [fra, aus, per, den], + + games = [ + Game(fra, aus, datetime(2018, 6, 16, 10, 0), + where=places['kazan'], + ascore=2, bscore=1), + + Game(per, den, datetime(2018, 6, 16, 14, 0), + where=places['saransk'], + ascore=0, bscore=1), + + + Game(den, aus, datetime(2018, 6, 21, 12, 0), + where=places['samara'], + ), + Game(fra, per, datetime(2018, 6, 21, 15, 0), + where=places['yekaterinburg'], + ), + + Game(den, fra, datetime(2018, 6, 26, 14, 0), + where=places['moscow'], + ), + Game(aus, per, datetime(2018, 6, 26, 14, 0), + where=places['sochi'], + ), + + ]), + + d=Group(teams = [arg, ice, cro, nig], + + games = [ + Game(arg, ice, datetime(2018, 6, 16, 13, 0), + where=places['spartak'], + ascore=1, bscore=1), + + Game(cro, nig, datetime(2018, 6, 16, 19, 0), + where=places['kaliningrad'], + ascore=2, bscore=0), + + + Game(arg, cro, datetime(2018, 6, 21, 18, 0), + where=places['novgorod'], + ), + + Game(nig, ice, datetime(2018, 6, 22, 15, 0), + where=places['volgograd'], + ), + + + Game(nig, arg, datetime(2018, 6, 26, 18, 0), + where=places['stpetersberg'], + ), + Game(ice, cro, datetime(2018, 6, 26, 18, 0), + where=places['rostovondon'], + ), + ]), + + e=Group(teams = [bra, swi, crc, ser], + + games = [ + Game(crc, ser, datetime(2018, 6, 17, 12, 0), + where=places['samara'], + ascore=0, bscore=1), + + Game(bra, swi, datetime(2018, 6, 17, 18, 0), + where=places['rostovondon'], + ascore=1, bscore=1), + + + Game(bra, crc, datetime(2018, 6, 22, 12, 0), + where=places['stpetersberg'], + ), + Game(ser, swi, datetime(2018, 6, 22, 18, 0), + where=places['kaliningrad'], + ), + + Game(ser, bra, datetime(2018, 6, 27, 18, 0), + where=places['spartak'], + ), + Game(swi, crc, datetime(2018, 6, 27, 18, 0), + where=places['novgorod'], + ), + ]), + + f=Group(teams = [ger, swe, mex, sko], + + games = [ + Game(ger, mex, datetime(2018, 6, 17, 15, 0), + where=places['moscow'], + ascore=0, bscore=1), + + Game(swe, sko, datetime(2018, 6, 18, 12, 0), + where=places['novgorod'], + ascore=1, bscore=0), + + + Game(sko, mex, datetime(2018, 6, 23, 15, 0), + where=places['rostovondon'], + ), + Game(ger, swe, datetime(2018, 6, 23, 18, 0), + where=places['sochi'], + ), + + Game(sko, ger, datetime(2018, 6, 27, 14, 0), + where=places['kazan'], + ), + Game(mex, swe, datetime(2018, 6, 27, 14, 0), + where=places['yekaterinburg'], + ), + ]), + + g=Group(teams = [bel, pan, tun, eng], + + games = [ + Game(bel, pan, datetime(2018, 6, 18, 15, 0), + where=places['sochi'], + ascore=3, bscore=0), + + Game(tun, eng, datetime(2018, 6, 18, 18, 0), + where=places['volgograd'], + ascore=1, bscore=2), + + + Game(bel, tun, datetime(2018, 6, 23, 12, 0), + where=places['spartak'], + ), + + Game(eng, pan, datetime(2018, 6, 24, 12, 0), + where=places['novgorod'], + ), + + Game(eng, bel, datetime(2018, 6, 28, 18, 0), + where=places['kaliningrad'], + ), + Game(pan, tun, datetime(2018, 6, 28, 18, 0), + where=places['saransk'], + ), + ]), + + h=Group(teams = [pol, sen, col, jap], + + games = [ + Game(col, jap, datetime(2018, 6, 19, 12, 0), + where=places['saransk'], + ascore=1, bscore=2), + + Game(pol, sen, datetime(2018, 6, 19, 15, 0), + where=places['spartak'], + ascore=1, bscore=2), + + + Game(jap, sen, datetime(2018, 6, 24, 15, 0), + where=places['yekaterinburg'], + ), + Game(pol, col, datetime(2018, 6, 24, 18, 0), + where=places['kazan'], + ), + + Game(jap, pol, datetime(2018, 6, 28, 14, 0), + where=places['volgograd'], + ), + Game(sen, col, datetime(2018, 6, 28, 14, 0), + where=places['samara'], + ), + ])) + + +print() +print("It's a knock out!") + +# Simulate a knockout draw + bugs +jsf_places = [ + places['sochi'], + places['kazan'], + places['samara'], + places['rostovondon'], + + places['moscow'], + places['novgorod'], + places['stpetersberg'], + places['spartak'], + + places['novgorod'], + places['kazan'], + places['samara'], + places['sochi'], + + + places['stpetersberg'], + places['moscow'], + + places['stpetersberg'], + + places['moscow'], + ] + +jsf_dates = [ + datetime(2018, 6, 30, 18, 0), + datetime(2018, 6, 30, 14, 0), + datetime(2018, 7, 2, 14, 0), + datetime(2018, 7, 2, 18, 0), + + datetime(2018, 7, 1, 14, 0), + datetime(2018, 7, 1, 18, 0), + datetime(2018, 7, 3, 14, 0), + datetime(2018, 7, 3, 18, 0), + + datetime(2018, 7, 6, 14, 0), + datetime(2018, 7, 6, 18, 0), + datetime(2018, 7, 7, 14, 0), + datetime(2018, 7, 7, 18, 0), + + datetime(2018, 7, 10, 18, 0), + datetime(2018, 7, 11, 18, 0), + + datetime(2018, 7, 14, 14, 0), + datetime(2018, 7, 15, 15, 0), + ] + +def name2team(name): + """ Convert string to team object """ + return globals()[name] + + +jsf = JeuxSansFrontieres( + groups, + places=jsf_places, + dates=jsf_dates, + name2team=name2team) + + + + + From 53e52759a82724e559caffd98ba003f2ccaccaa8 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 4 Jul 2018 11:23:27 -0400 Subject: [PATCH 375/642] move north pole to team --- karmapi/wc/game.py | 2 ++ karmapi/wc/team.py | 11 +++++++++++ karmapi/wc/wc2018.py | 8 -------- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/karmapi/wc/game.py b/karmapi/wc/game.py index 9c84feb..a55b94c 100644 --- a/karmapi/wc/game.py +++ b/karmapi/wc/game.py @@ -1,5 +1,7 @@ from .base import * +from .events import Penalty + class Game: NUMBER = 1 diff --git a/karmapi/wc/team.py b/karmapi/wc/team.py index 5f5d8d1..080f05b 100644 --- a/karmapi/wc/team.py +++ b/karmapi/wc/team.py @@ -1,4 +1,7 @@ from .base import * +from .place import Place + + squadsize = 23 n = 32 @@ -102,6 +105,14 @@ def statto(self): return msg +class NorthPole(Place): + """ Where teams go when out? """ + + name = 'North Pole' + lat = 90 + lon = 0 + + class Player: """ A player of class diff --git a/karmapi/wc/wc2018.py b/karmapi/wc/wc2018.py index b7f7bbd..46d8287 100644 --- a/karmapi/wc/wc2018.py +++ b/karmapi/wc/wc2018.py @@ -212,14 +212,6 @@ class Sochi(Place): lat = 43 + (24 / 60) lon = 39 + (57 / 60) -class NorthPole(Place): - """ Where teams go when out? """ - - name = 'North Pole' - lat = 90 - lon = 0 - - places = dict( From 390fa1e5f9762dbf0ace901027e45b1657000348 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 4 Jul 2018 13:52:02 -0400 Subject: [PATCH 376/642] ko data juggle and red green balls for pens --- karmapi/wc/jsf.py | 8 ++++---- karmapi/wc/mexwave.py | 26 ++++++++++++++++++++++---- karmapi/wc/wc2018.py | 6 +++--- 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/karmapi/wc/jsf.py b/karmapi/wc/jsf.py index 5885cf2..b2a9752 100644 --- a/karmapi/wc/jsf.py +++ b/karmapi/wc/jsf.py @@ -255,11 +255,11 @@ def its_a_knockout(self): for ix, game in enumerate(ko[12:14]): if ix % 2 == 0: - self.winners[game.number] = self.knockout[15], 'a' - self.seconds[game.number] = self.knockout[14], 'b' + self.winners[game.number] = self.knockout[14], 'a' + self.seconds[game.number] = self.knockout[15], 'b' else: - self.winners[game.number] = self.knockout[15], 'b' - self.seconds[game.number] = self.knockout[14], 'a' + self.winners[game.number] = self.knockout[14], 'b' + self.seconds[game.number] = self.knockout[15], 'a' diff --git a/karmapi/wc/mexwave.py b/karmapi/wc/mexwave.py index d2fdffd..8a64cd1 100644 --- a/karmapi/wc/mexwave.py +++ b/karmapi/wc/mexwave.py @@ -332,6 +332,23 @@ def show_knockout(self): self.message(msg="{} {} {} {}".format( aa, ascore, bscore, bb), xx=xx, yy=yy, fill='green') + + px = xx - 0.01 + dx = -0.01 + + for pens in game.apen, game.bpen: + for pix, pen in enumerate(pens): + if pen.score: + rog = 'green' + else: + rog = 'red' + + print(rog, ix) + xp = px + (pix * dx) + self.ball(xx=xp, yy=yy + 0.025, fill=rog, size=2) + + px = xx + 0.01 + dx *= -1 yy += 0.05 @@ -340,7 +357,7 @@ def show_knockout(self): yy = .6 yinc *= 2 - final = self.jsf.knockout[-1] + final = self.jsf.knockout[-2] if final.ascore != None: xx += 0.1 yy = 0.6 @@ -351,15 +368,16 @@ def show_knockout(self): - def ball(self, place, fill='red', size=5, xoff=0, yoff=0): + def ball(self, place=None, fill='red', size=5, xoff=0, yoff=0, + xx=None, yy=None, **kwargs): """ Draw a filled circle at place """ - xx, yy = self.latlon2xy(place) + xx, yy = self.layout(place, xx, yy) self.canvas.create_oval( xx+xoff-size, yy+yoff-size, - xx+xoff+size, yy+yoff+size, fill='red') + xx+xoff+size, yy+yoff+size, fill=fill) async def run(self): """ Run the waves """ diff --git a/karmapi/wc/wc2018.py b/karmapi/wc/wc2018.py index 46d8287..8ee5a00 100644 --- a/karmapi/wc/wc2018.py +++ b/karmapi/wc/wc2018.py @@ -527,9 +527,9 @@ class Sochi(Place): places['stpetersberg'], places['moscow'], - places['stpetersberg'], - places['moscow'], + + places['stpetersberg'], ] jsf_dates = [ @@ -551,8 +551,8 @@ class Sochi(Place): datetime(2018, 7, 10, 18, 0), datetime(2018, 7, 11, 18, 0), - datetime(2018, 7, 14, 14, 0), datetime(2018, 7, 15, 15, 0), + datetime(2018, 7, 14, 14, 0), ] def name2team(name): From 76a7b39ba248851e0fbe180bc0bdda580a829d66 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 6 Jul 2018 15:56:27 -0400 Subject: [PATCH 377/642] goodbye brazil edition --- karmapi/wc/events.csv | 20 ++++++++++++++++++++ karmapi/wc/game.py | 21 ++++++++++++--------- karmapi/wc/mexwave.py | 23 +++++++++++++++-------- 3 files changed, 47 insertions(+), 17 deletions(-) diff --git a/karmapi/wc/events.csv b/karmapi/wc/events.csv index 4b75f67..5b97839 100644 --- a/karmapi/wc/events.csv +++ b/karmapi/wc/events.csv @@ -574,3 +574,23 @@ 2018, 7, 3, 18, col, eng, 128, penalty, col, 7, 0 2018, 7, 3, 18, col, eng, 127, penalty, eng, 4, 1 2018, 7, 3, 18, col, eng, 130, ft, 1, 1 + +2018, 7, 6, 14, urg, fra, 0, ko, 0, 0 +2018, 7, 6, 14, urg, fra, 33, yellow, fra, 21 +2018, 7, 6, 14, urg, fra, 38, yellow, urg, 6 +2018, 7, 6, 14, urg, fra, 40, goal, fra, 4 +2018, 7, 6, 14, urg, fra, 45, ht, 0, 1 +2018, 7, 6, 14, urg, fra, 61, goal, fra, 7 +2018, 7, 6, 14, urg, fra, 69, yellow, fra, 10 +2018, 7, 6, 14, urg, fra, 69, yellow, urg, 7 +2018, 7, 6, 14, urg, fra, 90, ft, 0, 2 + + +2018, 7, 6, 18, bra, bel, 0, ko, 0, 0 +2018, 7, 6, 18, bra, bel, 13, goal, bel, 107 +2018, 7, 6, 18, bra, bel, 31, goal, bel, 7 +2018, 7, 6, 18, bra, bel, 45, ht, 0, 2 +2018, 7, 6, 18, bra, bel, 47, yellow, bel, 2 +2018, 7, 6, 18, bra, bel, 71, yellow, bel, 15 +2018, 7, 6, 18, bra, bel, 75, goal, bra, 8 +2018, 7, 6, 18, bra, bel, 90, ft, 1, 2 diff --git a/karmapi/wc/game.py b/karmapi/wc/game.py index a55b94c..cd28985 100644 --- a/karmapi/wc/game.py +++ b/karmapi/wc/game.py @@ -205,16 +205,19 @@ async def penalties(self): def _penalty(self, team): """ Simulate a penalty """ which = len(self.apen) + len(self.bpen) - - if random() < 0.5: - pen = Penalty(team, score=True, game=self, - when=self.when + timedelta(minutes=120 + which), + + score = False + if random() < 0.8: + score = True + + pen = Penalty(team, score=score, game=self, + when=self.when + timedelta(minutes=120 + which), who = randint(1, 23)) - if team is self.a: - self.apen.append(pen) - else: - self.bpen.append(pen) + if team is self.a: + self.apen.append(pen) + else: + self.bpen.append(pen) return self.all_over() @@ -283,7 +286,7 @@ async def yellow(self, team, who=None, when=None): self.b.yellow += 1 minute = int((when - self.when).total_seconds() / 60) - await self.flash(" %dm" % minute, fill='purple') + await self.flash(" %dm" % minute, fill='purple', card='yellow') async def red(self, team, who=None, when=None): diff --git a/karmapi/wc/mexwave.py b/karmapi/wc/mexwave.py index 8a64cd1..d85745b 100644 --- a/karmapi/wc/mexwave.py +++ b/karmapi/wc/mexwave.py @@ -198,9 +198,9 @@ def show_score_flashes(self): """ Show the score flashes """ xx, yy = self.teleprint_xxyy - for msg, fill in self.teleprints: + for msg, fill, card in self.teleprints: - self.message(msg=msg, fill=fill, xx=xx, yy=yy) + self.message(msg=msg, fill=fill, card=card, xx=xx, yy=yy) xx, yy = xx, yy + .025 # Now do messages @@ -219,9 +219,9 @@ def show_score_flashes(self): self.messages = list(keep.values()) - def teleprint(self, msg=None, fill='orange', **kwargs): + def teleprint(self, msg=None, fill='orange', card=None, **kwargs): """ teleprinter messages """ - self.teleprints.append((msg, fill)) + self.teleprints.append((msg, fill, card)) if len(self.teleprints) > 10: del self.teleprints[0] @@ -237,7 +237,9 @@ def layout(self, where=None, xx=None, yy=None, **kwargs): return xx, yy - def message(self, msg=None, where=None, fill='red', size=5, xoff=0, yoff=0, + def message(self, msg=None, where=None, fill='red', + card=False, + size=5, xoff=0, yoff=0, xx=None, yy=None, **kwargs): """ Message from a place """ @@ -245,6 +247,12 @@ def message(self, msg=None, where=None, fill='red', size=5, xoff=0, yoff=0, self.canvas.create_text((xx + xoff, yy + yoff), text=msg, fill=fill) + if card: + print("CARD", card) + x = xx + xoff - 150 + y = yy + yoff + self.canvas.create_rectangle(x, y, x + 10, y + 10, fill=card) + def show_tables(self): @@ -334,7 +342,7 @@ def show_knockout(self): xx=xx, yy=yy, fill='green') px = xx - 0.01 - dx = -0.01 + dx = -0.005 for pens in game.apen, game.bpen: for pix, pen in enumerate(pens): @@ -343,9 +351,8 @@ def show_knockout(self): else: rog = 'red' - print(rog, ix) xp = px + (pix * dx) - self.ball(xx=xp, yy=yy + 0.025, fill=rog, size=2) + self.ball(xx=xp, yy=yy + 0.025, fill=rog, size=3) px = xx + 0.01 dx *= -1 From 2a6a3e4803a31d6d5ef0bd688b58368fe86c089c Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 7 Jul 2018 14:38:15 -0400 Subject: [PATCH 378/642] more wc space time confusion --- karmapi/wc/events.csv | 15 +++++++++++++++ karmapi/wc/jsf.py | 2 +- karmapi/wc/mexwave.py | 2 +- karmapi/wc/wc2018.py | 4 ++-- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/karmapi/wc/events.csv b/karmapi/wc/events.csv index 5b97839..f98373e 100644 --- a/karmapi/wc/events.csv +++ b/karmapi/wc/events.csv @@ -594,3 +594,18 @@ 2018, 7, 6, 18, bra, bel, 71, yellow, bel, 15 2018, 7, 6, 18, bra, bel, 75, goal, bra, 8 2018, 7, 6, 18, bra, bel, 90, ft, 1, 2 + +2018, 7, 7, 14, swe, eng, 0, ko, 0, 0 +2018, 7, 7, 14, swe, eng, 31, goal, eng, 6 +2018, 7, 7, 14, swe, eng, 45, ht, 0, 1 +2018, 7, 7, 14, swe, eng, 58, goal, eng, 20 +2018, 7, 7, 14, swe, eng, 87, yellow, eng, 6 +2018, 7, 7, 14, swe, eng, 87, yellow, swe, 11 +2018, 7, 7, 14, swe, eng, 94, yellow, swe, 7 +2018, 7, 7, 14, swe, eng, 96, ft, 0, 2 + +2018, 7, 7, 18, rus, cro, 0, ko, 0, 0 +2018, 7, 7, 18, rus, cro, 31, goal, rus, 6 +2018, 7, 7, 18, rus, cro, 45, ht, 1, 0 +2018, 7, 7, 18, rus, cro, 90, ft, 1, 0 + diff --git a/karmapi/wc/jsf.py b/karmapi/wc/jsf.py index b2a9752..429c85b 100644 --- a/karmapi/wc/jsf.py +++ b/karmapi/wc/jsf.py @@ -47,7 +47,7 @@ def __init__(self, groups, places=None, dates=None, self.start_time = datetime.utcnow() # factor to warp time by - self.timewarp = 10 / (30 * 24 * 60 * 60) + self.timewarp = 1 / (30 * 24 * 60 * 60) self.sleep = 0.01 self.knockout = [] diff --git a/karmapi/wc/mexwave.py b/karmapi/wc/mexwave.py index d85745b..77ab629 100644 --- a/karmapi/wc/mexwave.py +++ b/karmapi/wc/mexwave.py @@ -248,7 +248,7 @@ def message(self, msg=None, where=None, fill='red', self.canvas.create_text((xx + xoff, yy + yoff), text=msg, fill=fill) if card: - print("CARD", card) + #print("CARD", card, msg) x = xx + xoff - 150 y = yy + yoff self.canvas.create_rectangle(x, y, x + 10, y + 10, fill=card) diff --git a/karmapi/wc/wc2018.py b/karmapi/wc/wc2018.py index 8ee5a00..4e272bf 100644 --- a/karmapi/wc/wc2018.py +++ b/karmapi/wc/wc2018.py @@ -520,8 +520,8 @@ class Sochi(Place): places['novgorod'], places['kazan'], - places['samara'], places['sochi'], + places['samara'], places['stpetersberg'], @@ -545,8 +545,8 @@ class Sochi(Place): datetime(2018, 7, 6, 14, 0), datetime(2018, 7, 6, 18, 0), - datetime(2018, 7, 7, 14, 0), datetime(2018, 7, 7, 18, 0), + datetime(2018, 7, 7, 14, 0), datetime(2018, 7, 10, 18, 0), datetime(2018, 7, 11, 18, 0), From 626b97e08aea4cde17815e5a026c27ed4a9345b5 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 7 Jul 2018 15:14:58 -0400 Subject: [PATCH 379/642] import juggling, no need for base --- karmapi/wc/base.py | 11 ----- karmapi/wc/events.csv | 5 +- karmapi/wc/events.py | 2 +- karmapi/wc/game.py | 4 +- karmapi/wc/jsf.py | 12 +++-- karmapi/wc/mexwave.py | 10 +++- karmapi/wc/team.py | 4 +- karmapi/wc/wc.py | 4 +- karmapi/wc/wc2018.py | 112 +----------------------------------------- 9 files changed, 32 insertions(+), 132 deletions(-) delete mode 100644 karmapi/wc/base.py diff --git a/karmapi/wc/base.py b/karmapi/wc/base.py deleted file mode 100644 index 548f1af..0000000 --- a/karmapi/wc/base.py +++ /dev/null @@ -1,11 +0,0 @@ -from random import random, randint -import argparse -import csv -from collections import Counter, defaultdict, deque -from datetime import datetime, timedelta -import calendar -import sys - -import curio - -from karmapi import pigfarm, beanstalk diff --git a/karmapi/wc/events.csv b/karmapi/wc/events.csv index f98373e..553640b 100644 --- a/karmapi/wc/events.csv +++ b/karmapi/wc/events.csv @@ -606,6 +606,7 @@ 2018, 7, 7, 18, rus, cro, 0, ko, 0, 0 2018, 7, 7, 18, rus, cro, 31, goal, rus, 6 -2018, 7, 7, 18, rus, cro, 45, ht, 1, 0 -2018, 7, 7, 18, rus, cro, 90, ft, 1, 0 +2018, 7, 7, 18, rus, cro, 39, goal, cro, 9 +2018, 7, 7, 18, rus, cro, 45, ht, 1, 1 +2018, 7, 7, 18, rus, cro, 90, ft, 1, 1 diff --git a/karmapi/wc/events.py b/karmapi/wc/events.py index 9e1a41e..42d34a7 100644 --- a/karmapi/wc/events.py +++ b/karmapi/wc/events.py @@ -1,4 +1,4 @@ -from .base import * +import curio class GameEvent: diff --git a/karmapi/wc/game.py b/karmapi/wc/game.py index cd28985..24585f3 100644 --- a/karmapi/wc/game.py +++ b/karmapi/wc/game.py @@ -1,4 +1,6 @@ -from .base import * +import calendar +from datetime import datetime, timedelta +from random import random, randint from .events import Penalty diff --git a/karmapi/wc/jsf.py b/karmapi/wc/jsf.py index 429c85b..09a4cbe 100644 --- a/karmapi/wc/jsf.py +++ b/karmapi/wc/jsf.py @@ -1,4 +1,10 @@ -from .base import * +""" Jeus Sans Frontieres + +""" +from datetime import datetime, timedelta + +import curio + from .events import * from .game import Game @@ -288,10 +294,10 @@ def apres_match(self, game): game.apres_match() - if game.number == 63: + if game.number == 64: print('third place:', game.winner()) return - if game.number == 64: + if game.number == 63: print('Winner:', game.winner()) return diff --git a/karmapi/wc/mexwave.py b/karmapi/wc/mexwave.py index 77ab629..d70d40f 100644 --- a/karmapi/wc/mexwave.py +++ b/karmapi/wc/mexwave.py @@ -1,5 +1,13 @@ -from .base import * +from collections import defaultdict +from datetime import datetime, timedelta +import csv + +import curio + + + +from karmapi import pigfarm, beanstalk # add a PI Gui? class MexicanWaves(pigfarm.Yard): diff --git a/karmapi/wc/team.py b/karmapi/wc/team.py index 080f05b..e7638ad 100644 --- a/karmapi/wc/team.py +++ b/karmapi/wc/team.py @@ -1,6 +1,6 @@ -from .base import * -from .place import Place +from collections import defaultdict +from .place import Place squadsize = 23 diff --git a/karmapi/wc/wc.py b/karmapi/wc/wc.py index 21551e4..ba1b8a6 100644 --- a/karmapi/wc/wc.py +++ b/karmapi/wc/wc.py @@ -110,14 +110,16 @@ """ +import argparse +import curio from .jsf import JeuxSansFrontieres from .mexwave import MexicanWaves # break with tradition and import * -from .base import * from .wc2018 import * +from karmapi import pigfarm parser = argparse.ArgumentParser() parser.add_argument('--nopig', action='store_true') diff --git a/karmapi/wc/wc2018.py b/karmapi/wc/wc2018.py index 4e272bf..b339fad 100644 --- a/karmapi/wc/wc2018.py +++ b/karmapi/wc/wc2018.py @@ -1,116 +1,8 @@ -""" World Cup - -Over the years I've done a few world cup predict the scores things. - -There's another one coming so here we go. - -Eight groups of four. - -And six games per group. - -Will likely turn into a simulation of errors. - -Prior? probabilities for games.. aim it to predict first and second in each -group for now as those will be the ones that get there. - -Things to include maybe... factors for order games are played. - -Oh and stuff like what will be going on at home by June 2018. - -Russia are the hosts, and I understand have graciously offered to represent the -USA and Italy too, sorry you couldn't make the party. - -Seek Irish, Scots or English for advice on how to survive when your team is not -there. - -All times are UTC and subject to typos and other delights. - -The story so far. - -It's December 2017. World Cup finals draw in Russia is out. - -Italy and USA are already out. Sweden eliminated Italy and the USA story is more complex. - -On the Mueller advent calendar Michael Flynn pleaded guilty on the 1st. - -Picture wasn't clear on the 2nd. 3-4 maybe more faces? - -Back to the world cup. - -Group A. - -rus sau egy urg - - -OK.. back from the fixture lists. - -Order of games interesting and need to add places. Fair bit of moving around -in some groups. - -Some teams get to play after seeing the other game in their group in first two -rounds of games. - -As groups progress teams will be looking at what comes next, if they have a -couple of wins, or otherwise just how to get out of the group. - -Seeding has placed the teams with higher FIFA rankings with potentially less -travel complications, but then there are the fans back home and time zone -considerations. - -Now it is 2017 so there may be an obligatory block chain connection, but if so -it well be super low tech. - -And simulations. For now stuck deciding what to simulate.. oh and priors.. - -I think we may need some events here soon. - -Back to the coding. So rule 0: keep it under 1000 lines, bonus marks under -500. World cup rules, so you decide how to count. - -Subtracting docstrings there should be a lot less. And with luck sphinx will -magically turn the code into ok docs. - -rule 1: there is no rule one. It's the world cup, so breaking all the coding -rules. See also counting lines of code, world cup style. - -Or rather just writing what seems easiest at the time. - -There is a fair bit of going round in circles: check the commit log see git. - -Ok.. back to the football. - -The world cup mixes up 32 teams from around the world. The final draw mixes -everything up and there are some fascinating match ups. - -Simon Kuiper, football anthropologist?, wrote a fascinating book about matches -between countries, places that had been at war in the very recent past. Many -of the games covered were at world cups or big football federation finals. - -Others were just qualifying games. - -Sources: Wikipedia and scriblings on beer mats. - -Places coming along. - -Rostov-on-Don. Lots of twin towns, including Toronto. - -Some interesting games there too. - -545km to the south - -Simulations -=========== - -Run the code and you get a draw for the last 16. - -I am starting to simulate the first round games with 4 bottles in a pool. It's -like Paul the octobpus, but not quite so scientific. Or maybe it is? - -eng tun bel and pan played already. See Game's for results. +""" 2018 FIFA World Cup """ -from .base import * +from datetime import datetime from .jsf import JeuxSansFrontieres from .game import Game From d42ce379b874e5aa69b47036d4e6d965619a63df Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 7 Jul 2018 17:07:33 -0400 Subject: [PATCH 380/642] russians go out in a shoot out --- karmapi/wc/events.csv | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/karmapi/wc/events.csv b/karmapi/wc/events.csv index 553640b..f63f226 100644 --- a/karmapi/wc/events.csv +++ b/karmapi/wc/events.csv @@ -606,7 +606,23 @@ 2018, 7, 7, 18, rus, cro, 0, ko, 0, 0 2018, 7, 7, 18, rus, cro, 31, goal, rus, 6 +2018, 7, 7, 18, rus, cro, 35, yellow, cro, 6 +2018, 7, 7, 18, rus, cro, 38, yellow, cro, 3 2018, 7, 7, 18, rus, cro, 39, goal, cro, 9 2018, 7, 7, 18, rus, cro, 45, ht, 1, 1 -2018, 7, 7, 18, rus, cro, 90, ft, 1, 1 +2018, 7, 7, 18, rus, cro, 100, goal, cro, 21 +2018, 7, 7, 18, rus, cro, 102, yellow, cro, 21 +2018, 7, 7, 18, rus, cro, 114, yellow, rus, 22 +2018, 7, 7, 18, rus, cro, 115, goal, rus, 2 +2018, 7, 7, 18, rus, cro, 120, penalty, rus, 10, 0 +2018, 7, 7, 18, rus, cro, 121, penalty, cro, 11, 1 +2018, 7, 7, 18, rus, cro, 122, penalty, rus, 9, 1 +2018, 7, 7, 18, rus, cro, 123, penalty, cro, 8, 0 +2018, 7, 7, 18, rus, cro, 124, penalty, rus, 2, 0 +2018, 7, 7, 18, rus, cro, 125, penalty, cro, 10, 1 +2018, 7, 7, 18, rus, cro, 126, penalty, rus, 4, 1 +2018, 7, 7, 18, rus, cro, 127, penalty, cro, 21, 1 +2018, 7, 7, 18, rus, cro, 128, penalty, rus, 7, 1 +2018, 7, 7, 18, rus, cro, 129, penalty, cro, 7, 1 +2018, 7, 7, 18, rus, cro, 130, ft, 1, 1 From 924ea427bea74f1eb9226e9f9bacb0ca30a70300 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 7 Jul 2018 19:22:16 -0400 Subject: [PATCH 381/642] add wc warp speed option --- karmapi/wc/wc.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/karmapi/wc/wc.py b/karmapi/wc/wc.py index ba1b8a6..cbc161a 100644 --- a/karmapi/wc/wc.py +++ b/karmapi/wc/wc.py @@ -117,6 +117,7 @@ from .mexwave import MexicanWaves # break with tradition and import * +# so if you can't fint it here, check wcYYYY from .wc2018 import * from karmapi import pigfarm @@ -126,6 +127,8 @@ parser.add_argument('--gallery') parser.add_argument('--dump') parser.add_argument('--events') +parser.add_argument('--warp', type=float, default=1.0, + help="warp speed") parser.add_argument('--outfile') args = parser.parse_args() @@ -148,7 +151,8 @@ #parse_events(args.events, args.outfile) #sys.exit() - + +jsf.timewarp *= args.warp farm.add(GuidoClock) farm.add(MexicanWaves, dict(jsf=jsf, venues=places, gallery=args.gallery, From e5e95776c946e11948f544bb4a30a43d32ac81e6 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 11 Jul 2018 21:18:52 -0400 Subject: [PATCH 382/642] football is going home via france or croatia --- karmapi/wc/events.csv | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/karmapi/wc/events.csv b/karmapi/wc/events.csv index f63f226..f5ec3c7 100644 --- a/karmapi/wc/events.csv +++ b/karmapi/wc/events.csv @@ -626,3 +626,21 @@ 2018, 7, 7, 18, rus, cro, 129, penalty, cro, 7, 1 2018, 7, 7, 18, rus, cro, 130, ft, 1, 1 +2018, 7, 10, 18, fra, bel, 0, ko, 0, 0 +2018, 7, 10, 18, fra, bel, 45, ht, 0, 0 +2018, 7, 10, 18, fra, bel, 51, goal, fra, 5 +2018, 7, 10, 18, fra, bel, 63, yellow, bel, 10 +2018, 7, 10, 18, fra, bel, 71, yellow, fra, 2 +2018, 7, 10, 18, fra, bel, 87, yellow, fra, 13 +2018, 7, 10, 18, fra, bel, 92, yellow, fra, 10 +2018, 7, 10, 18, fra, bel, 94, yellow, bel, 5 +2018, 7, 10, 18, fra, bel, 97, ft, 1, 0 + +2018, 7, 11, 18, cro, eng, 0, ko, 0, 0 +2018, 7, 11, 18, cro, eng, 5, goal, eng, 12 +2018, 7, 11, 18, cro, eng, 45, ht, 0, 1 +2018, 7, 11, 18, cro, eng, 47, yellow, cro, 7 +2018, 7, 11, 18, cro, eng, 54, yellow, eng, 2 +2018, 7, 11, 18, cro, eng, 68, goal, cro, 4 +2018, 7, 11, 18, cro, eng, 109, goal, cro, 17 +2018, 7, 11, 18, cro, eng, 120, ft, 2, 1 From fe09ae8dd8dbe4e241c4b8e2bf597470db1fa721 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 13 Jul 2018 22:24:38 -0400 Subject: [PATCH 383/642] what is it all about? --- docs/cpr.rst | 68 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 65 insertions(+), 3 deletions(-) diff --git a/docs/cpr.rst b/docs/cpr.rst index 3ef73a3..c141ae9 100644 --- a/docs/cpr.rst +++ b/docs/cpr.rst @@ -14,11 +14,73 @@ Simulate nested spherical waves. So what is going on here? +Karma Pi started as a toolkit to explore data. + +In fact, little more of some examples of how to use *matplotlib*, +*pandas* and pure *python* to explore data. + +One goal was to find ways to generate data to help build better models +to help us better understand our changing climate and future +implications. + +Climate re-analysis data, such as is available through the Copernicus +project, is available for many variables on a 0.75 degree global grid, +or higher. + +The initial goal is to fit hidden Markov models to this data. The +idea being, that if we can capture the Markovity in the data then we +can project that forward as a baseline of what we might expect with +no action. + +Further, it is expected that those markov models themselves, may +provide insights into underlying processes driving the climate. + +Karma Pi has most of the tools that are needed to start exploring. + +In particular, tools for manipulating and visualising gridded data +from a roughly spherical objects. + +As we move out from Earth and expand into the solar system we can +again use nested spheres to help model solar weather and its impact on +earth's climate. + +Moving further still from earth to the centre of our galaxy and the +physics described in *A new paradigm*, nested spheres can be used to +model what is happenning at various key distances from the centre of a +galaxy. + +The same code that is used for modelling earth should work for +modelling spiral galaxies. + +The twist is that int the latter case I want to embed everything in de +Sitter Space along the lines of *A new paradigm*. + +The current focus is on how gravitational waves propogate from the +centre of a neutron star, factoring in the effect time dilation has. + +A key motivation in writing this code is to improve my own +understanding of the ideas in the book, in particular an exploration +of de Sitter space. + +This brings us to hyperbolic spaces and more projection of sphere like objects. + +Time and frequency +================== + +And this whole thing with time, or redshift, or gamma ray bursts +coming in to view. + +Earth +===== + +Climate +======= + +Spheres +======= + Mach and de Sciama ================== de Sitter Space =============== - -Time -==== From 5e3aa1584a3ea5437f159850762f4c614b48a42b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 16 Jul 2018 19:06:50 -0400 Subject: [PATCH 384/642] france wins belgium brexit but putin trumps as croatia inspire? --- karmapi/wc/events.csv | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/karmapi/wc/events.csv b/karmapi/wc/events.csv index f5ec3c7..70abd41 100644 --- a/karmapi/wc/events.csv +++ b/karmapi/wc/events.csv @@ -644,3 +644,25 @@ 2018, 7, 11, 18, cro, eng, 68, goal, cro, 4 2018, 7, 11, 18, cro, eng, 109, goal, cro, 17 2018, 7, 11, 18, cro, eng, 120, ft, 2, 1 + +2018, 7, 14, 14, bel, eng, 0, ko, 0, 0 +2018, 7, 14, 14, bel, eng, 4, goal, bel, 5 +2018, 7, 14, 14, bel, eng, 45, ht, 1, 0 +2018, 7, 14, 14, bel, eng, 52, yellow, eng, 5 +2018, 7, 14, 14, bel, eng, 76, yellow, eng, 6 +2018, 7, 14, 14, bel, eng, 82, goal, bel, 10 +2018, 7, 14, 14, bel, eng, 93, yellow, bel, 6 +2018, 7, 14, 14, bel, eng, 94, ft, 2, 0 + +2018, 7, 15, 15, fra, cro, 0, ko, 0, 0 +2018, 7, 15, 15, fra, cro, 18, goal, fra, 117 +2018, 7, 15, 15, fra, cro, 27, yellow, fra, 13 +2018, 7, 15, 15, fra, cro, 28, goal, cro, 4 +2018, 7, 15, 15, fra, cro, 38, goal, fra, 7 +2018, 7, 15, 15, fra, cro, 41, yellow, fra, 21 +2018, 7, 15, 15, fra, cro, 45, ht, 2, 1 +2018, 7, 15, 15, fra, cro, 59, goal, fra, 6 +2018, 7, 15, 15, fra, cro, 65, goal, fra, 10 +2018, 7, 15, 15, fra, cro, 69, goal, cro, 17 +2018, 7, 15, 15, fra, cro, 92, yellow, cro, 2 +2018, 7, 15, 15, fra, cro, 96, ft, 4, 2 From f7cb9b526efdc477bf5269fc5ad70dbadca5bc20 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 16 Jul 2018 19:48:00 -0400 Subject: [PATCH 385/642] puzzle: mystical incantation seems to have stopped working --- karmapi/cpr.py | 6 +++++- karmapi/ncdf.py | 7 ++++--- tests/test_gilliam.py | 20 ++++++++++++++++++++ 3 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 tests/test_gilliam.py diff --git a/karmapi/cpr.py b/karmapi/cpr.py index b3eabce..1621788 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -484,7 +484,7 @@ async def run(self): await curio.sleep(self.sleep) -def main(): +def argument_parser(): parser = argparse.ArgumentParser() @@ -499,6 +499,10 @@ def main(): parser.add_argument('--inc', type=int, default=4) parser.add_argument('--base', type=int, default=20) + +def main(): + + parser = argparse.ArgumentParser() args = parser.parse_args() diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 0574aa5..439e1d4 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -321,7 +321,7 @@ def __init__(self, parent, stamps=None, values=None, self.values = values self.save = save - super().__init__(parent) + super().__init__(parent, **kwargs) def build(self): @@ -361,7 +361,7 @@ def build(self): if __name__ == '__main__': - parser = argparse.ArgumentParser() + parser = cpr.argument_parser() parser.add_argument('--path', default='karmapi/ecmwf') parser.add_argument('--value', default='t2m') @@ -413,7 +413,8 @@ def build(self): print('min max:') print(values[0].min(), values[0].max()) - parms = dict(stamps=stamps, values=values, save=args.save) + parms = dict(stamps=stamps, values=values, save=args.save, + n=args.n, inc=args.inc, base=args.base) farm = pigfarm.sty(World, parms) diff --git a/tests/test_gilliam.py b/tests/test_gilliam.py new file mode 100644 index 0000000..a849849 --- /dev/null +++ b/tests/test_gilliam.py @@ -0,0 +1,20 @@ +import curio + +from karmapi.gilliam import terry + + +async def coro(): + + for x in range(10): + await curio.sleep(.1) + print(x) + + + print('CORO terry():', terry()) + + assert terry() == False + + +xx = curio.run(coro) + +print(xx) From 948fd87c462b6cff30eff0b93420bc1ae4eb0465 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 17 Jul 2018 12:41:35 -0400 Subject: [PATCH 386/642] gilliam.terry might be working now --- karmapi/gilliam.py | 8 +++++--- tests/test_gilliam.py | 16 ++++++---------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/karmapi/gilliam.py b/karmapi/gilliam.py index a7572f3..320d6b3 100644 --- a/karmapi/gilliam.py +++ b/karmapi/gilliam.py @@ -76,9 +76,11 @@ def terry(flag=None): Credits: @dabeaz and @yarkot """ - flag = flag or 256 - - return sys._getframe(2).f_code.co_flags & flag + flag = flag or 128 + + co_flags = sys._getframe(2).f_code.co_flags + + return co_flags & flag if __name__ == '__main__': diff --git a/tests/test_gilliam.py b/tests/test_gilliam.py index a849849..bd26d09 100644 --- a/tests/test_gilliam.py +++ b/tests/test_gilliam.py @@ -2,19 +2,15 @@ from karmapi.gilliam import terry +def func(): -async def coro(): - - for x in range(10): - await curio.sleep(.1) - print(x) - - - print('CORO terry():', terry()) + assert not terry() - assert terry() == False +async def coro(): + assert terry() +func() + xx = curio.run(coro) -print(xx) From eeb7ddd5bd6f48b97d17437de2da7afd4eedb560 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 19 Jul 2018 19:23:38 -0400 Subject: [PATCH 387/642] ncdf running again with cpr --- karmapi/cpr.py | 2 ++ karmapi/ncdf.py | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 1621788..92f9ee2 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -499,6 +499,8 @@ def argument_parser(): parser.add_argument('--inc', type=int, default=4) parser.add_argument('--base', type=int, default=20) + return parser + def main(): diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 439e1d4..2bc1568 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -342,8 +342,8 @@ def build(self): tail = True - if tail: - sphere = WorldView(self.stamps, self.values) + if tail or head: + sphere = WorldView(self.stamps, self.values, head=head, tail=tail) sphere.save = self.save or False else: sphere = cpr.Sphere((size, size), head=head, tail=tail) From 444ab75ebb6ef13b3dfe344dcb9f80e5495ffd30 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 19 Jul 2018 20:08:30 -0400 Subject: [PATCH 388/642] shine zodiacal light on global data with tea pots --- karmapi/mayqueen.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 karmapi/mayqueen.py diff --git a/karmapi/mayqueen.py b/karmapi/mayqueen.py new file mode 100644 index 0000000..c5ce8f5 --- /dev/null +++ b/karmapi/mayqueen.py @@ -0,0 +1,20 @@ +""" +Shine some zodiacal light on spherical data + + +""" + +from karmapi import cpr, tpot + +class MayQueen(cpr.Sphere): + + + async def run(self): + """ Run surrounding spheres through tea pots + + """ + pass + + + + From f4a75d232ff0778926c41b3aa5f9725c4c8dcd97 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 21 Jul 2018 17:33:22 -0400 Subject: [PATCH 389/642] give cpr to its argument parsing --- karmapi/cpr.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 92f9ee2..935b08f 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -504,7 +504,7 @@ def argument_parser(): def main(): - parser = argparse.ArgumentParser() + parser = argument_parser() args = parser.parse_args() From 736c7b84e32bd31221ed48721978b1e22ee3cb41 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 22 Jul 2018 19:19:24 -0400 Subject: [PATCH 390/642] more round objects for cpr --- karmapi/cpr.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 935b08f..23958b4 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -56,7 +56,10 @@ def __init__(self, size=None, head=False, tail=False, self.next_ball = None self.fade = 1 / math.e self.t = t + self.M = m + self.r = r + # time moves slower in the inner spheres? self.sleep = 1 / self.size[0] @@ -290,6 +293,23 @@ async def end_run(self): grid.append(value) self.grid2rgb(grid) + + +class CelestialSphere(Sphere): + """ An outer sphere + + Embed random neutron stars in a de Sitter Space + + Present a window onto this sphere to inner layers. + """ + pass + +class NeutronStar(Sphere): + """ An inner sphere + + Just supply the mass. + """ + pass def randunit(): From c7916095d93c2c66c0b2de1ff3713d8e4e48d5dc Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 23 Jul 2018 15:46:35 -0400 Subject: [PATCH 391/642] tankrain switcheroo upper x option --- karmapi/tankrain.py | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index 6d0aac4..21952ec 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -56,6 +56,7 @@ def __init__(self, parent, path=None, version='local', date=None, *args): self.add_event_map('l', self.fewer_images) self.add_event_map('m', self.more_images) + self.add_event_map('X', self.switcheroo) def load_images(self): @@ -86,14 +87,30 @@ def compute_data(self): self.ix = ix - self.data = im + self.data = im - def get_images(self): - # FIXME -- create key bindings to select time + def when(self): + """ current date """ date = self.date + datetime.timedelta(seconds=self.timewarp) + + return date + + def where(self, when=None): + """ Path for date """ + date = when or self.when() + path = Path(f'{self.path}/{date.year}/{date.month}/{date.day}/').expanduser() + return path + + + def get_images(self, when=None): + + # FIXME -- create key bindings to select time + date = when or self.when() + path = self.where(date) + print(f'loading images for path: {path} v{self.version}v') jpegs = path.glob('{}*.[jp][np]g'.format(self.version)) @@ -107,6 +124,25 @@ def get_images(self): yield image + async def switcheroo(self): + """ switcheroo + + Swap images with those for previous day + + """ + current = self.when() + previous = current - datetime.timedelta(days=1) + + cfolder = self.where(current) + pfolder = self.where(previous) + + for image in self.get_images(current): + image.rename(pfolder) + + for image in self.get_images(previous): + image.rename(cfolder) + + async def next_view(self): switch = dict( From e1cb57305e3993ad7464ece6086504cdf6c3e96a Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 23 Jul 2018 16:03:12 -0400 Subject: [PATCH 392/642] switcheroo look before you leap upgrade --- karmapi/tankrain.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index 21952ec..186140b 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -135,12 +135,21 @@ async def switcheroo(self): cfolder = self.where(current) pfolder = self.where(previous) - - for image in self.get_images(current): - image.rename(pfolder) - for image in self.get_images(previous): - image.rename(cfolder) + # Get the lists of image names before we start moving things around + cimages = list(self.get_images(current)) + pimages = list(self.get_images(previous)) + print('switcheroo time') + print(cimages) + print(pimages) + + for image in cimages: + image.rename(pfolder / image.name) + + for image in pimages: + image.rename(cfolder / image.name) + + self.load_images() async def next_view(self): From 69cc0d6d1e720a9ad15fb92dd16bff86bc0d5b17 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 29 Jul 2018 18:44:48 -0400 Subject: [PATCH 393/642] celestial sphere thoughts --- karmapi/cpr.py | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 23958b4..b380012 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -295,15 +295,6 @@ async def end_run(self): self.grid2rgb(grid) -class CelestialSphere(Sphere): - """ An outer sphere - - Embed random neutron stars in a de Sitter Space - - Present a window onto this sphere to inner layers. - """ - pass - class NeutronStar(Sphere): """ An inner sphere @@ -504,6 +495,29 @@ async def run(self): await curio.sleep(self.sleep) +class CelestialSphere(NestedWaves): + """ An outer sphere of nested waves + + Embed random neutron stars in a de Sitter Space + + Present a window onto this sphere to inner layers. + + N = a / M for number of stars + + Give them mass, velocity to get ball rolling + + Each star does its own thing, schedules itself to run. + + Stars collide -- for now do pass through. + + Just model gravitational wave + + reflect what passes its way + """ + pass + + + def argument_parser(): parser = argparse.ArgumentParser() From 85a9f0624ad487c41760668eaadd432ed1eacf20 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 30 Jul 2018 14:08:29 -0400 Subject: [PATCH 394/642] some celestial sphere progress? --- karmapi/cpr.py | 46 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index b380012..ed3b525 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -105,6 +105,7 @@ def project(self): return image def rgb2grid(self): + """ Change lists of red green blue to a quantised pixel grid""" grid = [] for rgb in zip(self.red, self.green, self.blue): pixel = tuple(self.quantise(x) for x in rgb) @@ -114,6 +115,16 @@ def rgb2grid(self): async def run(self): + """ Run a sphere + + + Does one tick for the sphere. + + so self.t is also a count of how often we've been here. + + at least in this thread. + + """ self.t += 1 @@ -278,7 +289,7 @@ async def end_run(self): for y in range(n2): - yy = (y / n2) + (1 / (2 * n2)) + yy = (y / n2) + (1 / (2 * n2)) * 2 * math.pi yy += self.inc * self.t rc, rphase, rscale = self.waves['r'] @@ -288,7 +299,8 @@ async def end_run(self): value = ( sample_wave(rphase, xx) * rscale, sample_wave(bphase, yy) * bscale, - sample_wave(gphase, xx+yy) * gscale) + # scratches head and wonders if xx is ok in next line + sample_wave(gphase, xx) * gscale) grid.append(value) @@ -514,7 +526,33 @@ class CelestialSphere(NestedWaves): reflect what passes its way """ - pass + def __init__(self, parent, a=1, n=None, m=None): + """ Initialise. + + *a* is the size of the universe + + *m* the mean mass of galaxies. + + *n* is the number of galaxies. + + However, we assume: + + n = a / m + + By setting a = 1 as a default, you can control the + expected number of galaxies by setting m to 1/n. + + + So, for ~7 galaxies, set m to 1/7 or just supply n == 7 + """ + + super().__init__(parent) + + + + def build(self): + """ Create the balls """ + pass @@ -529,7 +567,9 @@ def argument_parser(): parser.add_argument( '--name', default='tree', help='what to show') + parser.add_argument('-a', type=int, default=1) parser.add_argument('-n', type=int, default=10) + parser.add_argument('-m', type=int, default=1) parser.add_argument('--inc', type=int, default=4) parser.add_argument('--base', type=int, default=20) From 560eb82e0d19c2d08cedfb06317e5b57e5e7e03c Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 30 Jul 2018 17:03:50 -0400 Subject: [PATCH 395/642] more round objects --- karmapi/cpr.py | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index ed3b525..5b3175a 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -507,7 +507,7 @@ async def run(self): await curio.sleep(self.sleep) -class CelestialSphere(NestedWaves): +class CelestialSphere(Sphere): """ An outer sphere of nested waves Embed random neutron stars in a de Sitter Space @@ -548,13 +548,30 @@ def __init__(self, parent, a=1, n=None, m=None): super().__init__(parent) - + n = n or a / m + a = a or n * m + m = a / n + + self.n = n + self.m = m + self.a = a + def build(self): - """ Create the balls """ - pass + """ Create the balls - + Really should place them in the five dimensions, + + but have a constraint that gets us down to four dimensions. + + For now, place them randomly in a unit cube. + """ + self.balls = NeutronStar + + + async def run(self): + """ ??? """ + super().run() def argument_parser(): From 200bafd1e72991219f248d0d4b5c986592a5ea96 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 31 Jul 2018 16:55:31 -0400 Subject: [PATCH 396/642] add gauss to the celestial mix --- karmapi/cpr.py | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 5b3175a..4e3420f 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -33,13 +33,14 @@ from karmapi import base, tpot, pigfarm -from random import random, randint +from random import random, randint, gauss class Sphere: def __init__(self, size=None, head=False, tail=False, - t=0, m=1., r=1.): + t=0, m=None, r=None, omega=None, velocity=None): + # resolution size = size or (4, 4) self.red = [] @@ -56,11 +57,23 @@ def __init__(self, size=None, head=False, tail=False, self.next_ball = None self.fade = 1 / math.e self.t = t - self.M = m + + # Default for mass?? + if mu and m: + m = gauss(m, mu) + + self.M = m or gauss(1., 0.1) + + self.omega = omega or [random() for x in range(3)] + self.velocity = velocity or [random() for x in range(3)] + + + # radius corresponding to grid view??? self.r = r # time moves slower in the inner spheres? + # FIXME? self.sleep = 1 / self.size[0] self.reset(init=True) @@ -312,7 +325,9 @@ class NeutronStar(Sphere): Just supply the mass. """ - pass + def __init__(self): + pass + def randunit(): @@ -339,6 +354,7 @@ class NestedWaves(pigfarm.Yard): but put it in the tea pot too. + Lots of tea pots of all kinds. and draw slices on the canvas from the yard. @@ -507,7 +523,7 @@ async def run(self): await curio.sleep(self.sleep) -class CelestialSphere(Sphere): +class CelestialSphere(NestedWaves): """ An outer sphere of nested waves Embed random neutron stars in a de Sitter Space @@ -566,12 +582,18 @@ def build(self): For now, place them randomly in a unit cube. """ - self.balls = NeutronStar + self.balls = {} + for wave in range(self.n): + + self.ball[wave] = Sphere(m=1, mu=0.1) + # where is it? what's the observer? + + async def run(self): """ ??? """ - super().run() + def argument_parser(): From a344f9336232a2b232976c95fdd89fdbb148eaf8 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 31 Jul 2018 21:30:31 -0400 Subject: [PATCH 397/642] heads or tails to mass or not in cpr --- karmapi/cpr.py | 78 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 47 insertions(+), 31 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 4e3420f..f1e7687 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -36,9 +36,17 @@ from random import random, randint, gauss class Sphere: + """ If it hass mass (m) then pass through waves - def __init__(self, size=None, head=False, tail=False, - t=0, m=None, r=None, omega=None, velocity=None): + Regardless, show the view at radius r from centre of mass. + + omega: angular velocity, three orthogonal directions + + velocity: relative to what??? + """ + + def __init__(self, size=None, + t=0, m=None, r=None, omega=None, velocity=None, mu=None): # resolution size = size or (4, 4) @@ -51,8 +59,6 @@ def __init__(self, size=None, head=False, tail=False, self.history = None self.delta = False - self.head = head - self.tail = tail self.last_ball = None self.next_ball = None self.fade = 1 / math.e @@ -62,15 +68,13 @@ def __init__(self, size=None, head=False, tail=False, if mu and m: m = gauss(m, mu) - self.M = m or gauss(1., 0.1) + self.M = m self.omega = omega or [random() for x in range(3)] self.velocity = velocity or [random() for x in range(3)] - # radius corresponding to grid view??? self.r = r - # time moves slower in the inner spheres? # FIXME? @@ -82,10 +86,12 @@ def __init__(self, size=None, head=False, tail=False, def reset(self, init=False): """ Reset the sphere """ - if self.head or self.tail: - self.setup_end() + if self.M: + self.setup_wave() + + # first time only, carry on? if self.red: - return + return self.red.clear() self.green.clear() @@ -141,8 +147,8 @@ async def run(self): self.t += 1 - if self.head or self.tail: - return await self.end_run() + if self.M: + return await self.wave_run() # Here if we are between two spheres # so have last_ball and next_ball @@ -236,15 +242,15 @@ def normalise(self): self.grid2rgb(grid) - def setup_end(self): - """ Do some set up work for a head sphere """ + def setup_wave(self): + """ Do some set up work for a sphere with mass """ self.waves = {} self.inc = math.pi/20 for c in 'rgb': phase = random() - scale = random() + scale = 1 # was random() wondering if should just use 1? self.waves[c] = [c, phase, scale] @@ -276,8 +282,8 @@ def sample(self, x1, y1, x2, y2): ix = (yy * self.size[0]) + xx return self.red[ix], self.green[ix], self.blue[ix] - async def end_run(self): - """ inner or outer wave + async def wave_run(self): + """ wave red, green, blue @@ -320,10 +326,23 @@ async def end_run(self): self.grid2rgb(grid) -class NeutronStar(Sphere): - """ An inner sphere +class NeutronStar: + """ + + An inner sphere Just supply the mass. + + or... maybe a bit more complex. + + So, nest some waves and figure out project and sample. + + So what radii are interesting? + + Each star, or galaxy can have its own process, and a pi can run a + good few stars. + + """ def __init__(self): pass @@ -412,21 +431,18 @@ def build(self): size = (size, size) - head = True - - if ball: - head = False + M, mu = 1.0, 0.1 - tail = False - if ball == self.n - 1: - tail = True - - sphere = Sphere(size, head=head, tail=tail) + if ball and ball != self.n -1: + M, mu = None, None + + sphere = Sphere(size, m=M, mu=mu) - if not sphere.head: + if last_ball: sphere.last_ball = last_ball last_ball.next_ball = sphere - + + # may need to revisit this, spread some work self.uq.put(sphere) self.balls.append(sphere) @@ -473,8 +489,8 @@ async def draw(self): # xx = randint(0, self.n - 1) xx = self.dball - print(xx, 'lucky for some') ball = self.balls[xx] + print(xx, 'lucky for some', ball.size, ball.M) await self.draw_ball(ball) From 25384d0932ca3137f01e75d1d61293bfa21a37ac Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 1 Aug 2018 16:08:14 -0400 Subject: [PATCH 398/642] cpr prime edition --- karmapi/cpr.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index f1e7687..e6facea 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -31,7 +31,7 @@ from PIL import Image, ImageTk -from karmapi import base, tpot, pigfarm +from karmapi import base, tpot, prime, pigfarm from random import random, randint, gauss @@ -426,8 +426,17 @@ def build(self): # add a bunch of spheres to the queue self.balls = [] last_ball = None - for ball in range(self.n): - size = self.base + (ball * self.inc) + ball = 0 + + for nn in range(2, 1000_0000): + + if not prime.isprime(nn): + continue + + + print('prime', nn) + + size = self.base + (nn * self.inc) size = (size, size) @@ -448,6 +457,11 @@ def build(self): last_ball = sphere + # next ball + ball += 1 + if ball == self.n: + break + async def random_step_some(self): """ Step all balls once """ balls = self.balls[:] From cf50fbb9a9b81cb358259aedf28c4977f4da569e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 1 Aug 2018 16:11:59 -0400 Subject: [PATCH 399/642] no mass other than the inner ball --- karmapi/cpr.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index e6facea..22e2c00 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -442,7 +442,8 @@ def build(self): M, mu = 1.0, 0.1 - if ball and ball != self.n -1: + #if ball and ball != self.n -1: + if ball: M, mu = None, None sphere = Sphere(size, m=M, mu=mu) From ef18b10378923975985c13a94173e876b71b1469 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 1 Aug 2018 19:35:41 -0400 Subject: [PATCH 400/642] where to put the galaxies? --- karmapi/cpr.py | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 22e2c00..3b7fee1 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -574,7 +574,7 @@ class CelestialSphere(NestedWaves): reflect what passes its way """ def __init__(self, parent, a=1, n=None, m=None): - """ Initialise. + """Initialise. *a* is the size of the universe @@ -591,6 +591,41 @@ def __init__(self, parent, a=1, n=None, m=None): So, for ~7 galaxies, set m to 1/7 or just supply n == 7 + + + Where to put the galaxies? + + Should really put them in de Sitter Space + + A 4-dimensional subspace of a 5 dimensional Minkowski space + + metric + + ds**2 = sum ((x[i] - y[i]) ** 2) - (t - u) ** 2) + + R = sum ((x[i] - y[i]) ** 2) - (t - u) ** 2)) ** 0.5 + + + For now just place randomly in unit sphere with random velocity? + + Relative to the centre of the unit sphere? + + But try to set it to be in sync with the existing balls *** + + So don't need velocity after all. + + Just record each run what it is, balanced by the grid. + + For now everything is on a p * p grid, with p grids to make a cube. + + Each grid can be viewed as the surface of a sphere, latitude and + longitude grids. + + Aim to be able to navigate the grid of galaxies. + + Some interesting possibilities arise as sizes of grids vary. + + Elliptic curves and modular forms??? """ super().__init__(parent) From 2476a80db9f949d7eca4e02137ee0ff90fd26f6a Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 3 Aug 2018 13:51:38 -0400 Subject: [PATCH 401/642] made in sheffield? --- docs/johnny.rst | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/docs/johnny.rst b/docs/johnny.rst index 5592179..cdaeca2 100644 --- a/docs/johnny.rst +++ b/docs/johnny.rst @@ -2,4 +2,23 @@ Johnny Gill ============= -??? +Made in Sheffield, or thereabouts. + +Studied mathematics at Warwick University + +Then went to work with computers with the government. + +Which brought me to Ottawa and a whole new adventure. + +This of natural catastrophes, particularly Atlantic hurricanes. + +With time in Ireland and round in circles. + +With more computers, linux and python. + +Now back in Ottawa, third time lucky. + +Along the way many adventures. + + + From 097a25a314818c5046aee2dced9410b7aaa69093 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 3 Aug 2018 14:45:30 -0400 Subject: [PATCH 402/642] roikpi outline --- docs/roikpi.rst | 103 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) diff --git a/docs/roikpi.rst b/docs/roikpi.rst index 9515d29..e0c998e 100644 --- a/docs/roikpi.rst +++ b/docs/roikpi.rst @@ -14,3 +14,106 @@ How ideas change and evolve over time. Open data too and some ideas about decentralised systems. + +Worried Man Blues +================= + +Influences... everywhere + +Close to home, and far away. + +Oceans, atmosphere, wind and rain. + +Music and harmony. + +Made in Sheffield +================= + + +1980 County Clare +================= + +Mathematics and underground topology at Warwick + +Ireland and Greece + +Ottawa +====== + +1990's + +Loved Ottawa + +And now for something completely different +========================================== + + +Inertia + +Citizen science + +Reproducible research + +Data sharing + +Distributed data science + +Local expertise driving global collaboration. + +Inertia in belief systems + +Bayesian information + +Kerr metric + +World Cup +========= + +DIY visualisation + +Tankrain +======== + +show help + +Getting warmer +============== + +Slow it down + +ncdf needs love + +Professor Ian Stewart +===================== + +Dark matter, no-one can find any. + +Alternative cosmology by Colin Rourke. + +*anpotu* + +Binky, Pyree and Fred Hoyle +=========================== + +The Nature of the Universe + +The onion +========= + +Nested layers of spheres. + +Sunshine at Myrtle Park +======================= + +Demo time + +World Cup:: + + python3.6 -m karmapi.wc.wc --events events.csv + +World warms:: + + python3.6 -m karmapi.ncdf + +Johnny G +======== From 1c17fe44049f19731fad1912461163bbabdc4dd4 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 3 Aug 2018 14:50:27 -0400 Subject: [PATCH 403/642] another paradigm on a pi? --- docs/roikpi.rst | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/docs/roikpi.rst b/docs/roikpi.rst index e0c998e..4726b4e 100644 --- a/docs/roikpi.rst +++ b/docs/roikpi.rst @@ -102,10 +102,13 @@ The onion Nested layers of spheres. +Open data science + + Sunshine at Myrtle Park ======================= -Demo time +Demo time + questions World Cup:: @@ -113,7 +116,16 @@ World Cup:: World warms:: - python3.6 -m karmapi.ncdf + python3.6 -m karmapi.ncdf -Johnny G -======== +Another Pardigm:: + + python3.6 -m karmapi.cpr + +Black hole on a pi?:: + + maybe.. + + +Question time +============= From 51b64aa0c426f6046093962b1f3609f10e0bc1cd Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 3 Aug 2018 14:53:49 -0400 Subject: [PATCH 404/642] bump version and add note to install.rst --- docs/install.rst | 4 ++++ setup.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/install.rst b/docs/install.rst index 4cb2583..f7b84aa 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -505,6 +505,10 @@ If you want to install that version under the local user try:: To refresh to the latest code on github:: git pull + +And re-run the install:: + + python3 setup.py install --user I have this little function devined in .bashrc:: diff --git a/setup.py b/setup.py index bf1cd49..89a724f 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from codecs import open from os import path -__version__ = '0.9.3.1' +__version__ = '0.9.3.1.4' here = path.abspath(path.dirname(__file__)) From 3a0b25527d3857fe1115073507163bc564b79fd2 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 4 Aug 2018 12:17:35 -0400 Subject: [PATCH 405/642] breaking the rules helps understanding --- docs/roikpi.rst | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/docs/roikpi.rst b/docs/roikpi.rst index 4726b4e..460f918 100644 --- a/docs/roikpi.rst +++ b/docs/roikpi.rst @@ -71,6 +71,43 @@ World Cup DIY visualisation +Breaking the rules. + +the rules +--------- + +events: a time and a value + +Everything else is meta data. + +Code uses meta data to decide what to do with events. + +breaking +-------- + +mix events with meta data + +data in the data structures + +helps understanding +------------------- + +Get something tangible working. + +Let it help you explore + +Drinking from the hosepipe +-------------------------- + +Just time to record the events, with a few garbles? + +fixing the code +--------------- + +taking away and re-moulding + +time for tankrain... + Tankrain ======== @@ -82,6 +119,10 @@ Getting warmer Slow it down ncdf needs love + +deltas + + Professor Ian Stewart ===================== From 9b99cc26545ca852f68bfb43137689a53d82ba7a Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 4 Aug 2018 12:18:16 -0400 Subject: [PATCH 406/642] first line only of doc in pig farm help --- karmapi/pigfarm.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/karmapi/pigfarm.py b/karmapi/pigfarm.py index 04aa103..baf201d 100644 --- a/karmapi/pigfarm.py +++ b/karmapi/pigfarm.py @@ -146,12 +146,21 @@ async def help(self): keys.update(self.event_map) msg = '' for key, value in sorted(keys.items()): - msg += '{} {}\n'.format(key, value.__doc__) + msg += '{} {}\n'.format(key, + self.doc_firstline(value.__doc__)) from karmapi import piglet piglet.Help(msg) + def doc_firstline(self, doc): + """ Return first line of doc """ + if doc: + return doc.split('\n')[0] + else: + return "????" + + async def quit(self): """ quit the farm """ From affbf3070e0a36efac608b12970271963008f4ad Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 4 Aug 2018 12:56:21 -0400 Subject: [PATCH 407/642] shuffle mex wave code for use in roikpi --- karmapi/wc/mexwave.py | 20 +++++++------ karmapi/wc/wc.py | 68 +++++++++++++++++++++++-------------------- 2 files changed, 48 insertions(+), 40 deletions(-) diff --git a/karmapi/wc/mexwave.py b/karmapi/wc/mexwave.py index d70d40f..2a29625 100644 --- a/karmapi/wc/mexwave.py +++ b/karmapi/wc/mexwave.py @@ -12,7 +12,8 @@ # add a PI Gui? class MexicanWaves(pigfarm.Yard): - def __init__(self, parent, jsf=None, venues=None, gallery='.', + def __init__(self, parent, jsf=None, venues=None, + back_image=None, dump=None, events=None): """ Initialise the thing """ @@ -20,6 +21,7 @@ def __init__(self, parent, jsf=None, venues=None, gallery='.', self.jsf = jsf self.jsf.dump = dump + self.back_image = back_image if events: events = list(parse_events(events)) @@ -413,14 +415,14 @@ async def run(self): while True: self.canvas.delete('all') - image = self.find_image('1991') - if image: - #print(image) - image = self.load_image(image) - #print(image.size) - image = image.resize((int(self.height), int(self.width))) - #print(image.size, self.width, self.height) - self.beanstalk.image = image + if self.back_image: + image = self.find_image(self.back_imabe) + if image: + image = self.load_image(image) + + image = image.resize((int(self.height), int(self.width))) + + self.beanstalk.image = image self.draw() diff --git a/karmapi/wc/wc.py b/karmapi/wc/wc.py index cbc161a..f0d5665 100644 --- a/karmapi/wc/wc.py +++ b/karmapi/wc/wc.py @@ -122,45 +122,51 @@ from karmapi import pigfarm -parser = argparse.ArgumentParser() -parser.add_argument('--nopig', action='store_true') -parser.add_argument('--gallery') -parser.add_argument('--dump') -parser.add_argument('--events') -parser.add_argument('--warp', type=float, default=1.0, - help="warp speed") -parser.add_argument('--outfile') -args = parser.parse_args() -if args.nopig: - sys.exit() - -farm = pigfarm.PigFarm() +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('--nopig', action='store_true') + parser.add_argument('--back_image') + parser.add_argument('--dump') + parser.add_argument('--events') + parser.add_argument('--warp', type=float, default=1.0, + help="warp speed") + parser.add_argument('--outfile') + args = parser.parse_args() -from karmapi.mclock2 import GuidoClock + if args.nopig: + sys.exit() -xdump = args.dump -if xdump: - xdump = open(args.dump, 'w') + farm = pigfarm.PigFarm() -if args.outfile: - args.outfile = open(args.outfile, 'w') + from karmapi.mclock2 import GuidoClock -if args.events: - args.events = open(args.events) + xdump = args.dump + if xdump: + xdump = open(args.dump, 'w') - #parse_events(args.events, args.outfile) - #sys.exit() + if args.outfile: + args.outfile = open(args.outfile, 'w') -jsf.timewarp *= args.warp - -farm.add(GuidoClock) -farm.add(MexicanWaves, dict(jsf=jsf, venues=places, gallery=args.gallery, - events=args.events, - dump=xdump)) + if args.events: + args.events = open(args.events) -# add a random wc time warper? -curio.run(farm.run(), with_monitor=True) + #parse_events(args.events, args.outfile) + #sys.exit() + jsf.timewarp *= args.warp + farm.add(GuidoClock) + farm.add(MexicanWaves, dict(jsf=jsf, + venues=places, + back_image=args.back_image, + events=args.events, + dump=xdump)) + # add a random wc time warper? + curio.run(farm.run(), with_monitor=True) + + +if __name__ == '__main__': + + main() From 4b892eef8ee16db1bbba1111344bf74baf1de64d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 4 Aug 2018 13:30:29 -0400 Subject: [PATCH 408/642] just let quantise wrap around in cpr --- karmapi/cpr.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 3b7fee1..b5a77d0 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -203,7 +203,7 @@ def grid2rgb(self, value): def quantise(self, value): value = int(127 + (value * 128)) - value = max(0, min(value, 255)) + value = int(value % 256) return value From c6c35c8e8c12d4f59108e956cf89503cd980af46 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 4 Aug 2018 21:04:29 -0400 Subject: [PATCH 409/642] more cpr docstring and mexican wave fix --- karmapi/cpr.py | 20 +++++++++++- karmapi/roikpi.py | 71 +++++++++++++++++++++++++++++++++++++++++++ karmapi/wc/mexwave.py | 2 +- 3 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 karmapi/roikpi.py diff --git a/karmapi/cpr.py b/karmapi/cpr.py index b5a77d0..9a59d25 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -11,13 +11,31 @@ Things have moved on a little. -So each ball of nested waves will have a driver at the inside and at the outside too. +So each ball of nested waves will have a driver at the inside and at the +outside too. Different clocks at each layer. And then outer layers made up of other randomly placed nested spheres. But using a universal queue, so let each sphere run in its own co-routine. + +Update: 2018/8/4 +================ + +The Sphere and NestedWaves classes are moving along. + +For now, a sphere is represented by a square grid. + +We can decide later where the grid points lie. + +I have been experimenting with grids multiples of primes and made a few code +changes moving it closer to *anpotu*. + +Some interesting patterns emerging:: + + python3.6 cpr --base 0 --inc 23 -n 7 + """ import math diff --git a/karmapi/roikpi.py b/karmapi/roikpi.py new file mode 100644 index 0000000..95f5442 --- /dev/null +++ b/karmapi/roikpi.py @@ -0,0 +1,71 @@ +""" +Round objects in karma pi +""" + +import math + +import argparse + +from collections import deque, defaultdict, Counter, namedtuple + +import curio + +import numpy + +from PIL import Image, ImageTk + +from karmapi import base, tpot, prime, pigfarm + +from karmapi.wc import wc +from karmapi import cpr +from karmapi import ncdf +from karmapi import tankrain + +from random import random, randint, gauss + +def main(): + + parser = cpr.argument_parser() + + parser.add_argument('--pig', action='store_false', default=True) + parser.add_argument('--minutes', type=int, default=30) + parser.add_argument('path', nargs='?', default='.') + parser.add_argument('--background') + parser.add_argument('--version', default='') + parser.add_argument('--date') + parser.add_argument('--events') + + args = parser.parse_args() + + args.date = base.parse_date(args.date) + + if args.events: + args.events = open(args.events) + + farm = pigfarm.sty() + + + farm.add( + tankrain.TankRain, + dict(path=args.path, version=args.version, date=args.date)) + + # JeusSansFrontieres + jsf = wc.jsf + + farm.add( + wc.MexicanWaves, + dict(jsf=jsf, + venues=wc.places, + back_image=args.background, + events=args.events)) + + farm.add( + cpr.NestedWaves, + dict(n=args.n, inc=args.inc, base=args.base)) + + curio.run(farm.run(), with_monitor=True) + + +if __name__ == '__main__': + + main() diff --git a/karmapi/wc/mexwave.py b/karmapi/wc/mexwave.py index 2a29625..d4ed367 100644 --- a/karmapi/wc/mexwave.py +++ b/karmapi/wc/mexwave.py @@ -416,7 +416,7 @@ async def run(self): self.canvas.delete('all') if self.back_image: - image = self.find_image(self.back_imabe) + image = self.find_image(self.back_image) if image: image = self.load_image(image) From 16cae396fa2510bbebd47239d9ffb2eb5f70882d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 5 Aug 2018 09:57:33 -0400 Subject: [PATCH 410/642] blue red typo fix --- karmapi/cpr.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 9a59d25..3da330b 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -216,7 +216,7 @@ def grid2rgb(self, value): for ix, (r, g, b) in enumerate(value): self.red[ix] = r self.green[ix] = g - self.blue[ix] = r + self.blue[ix] = b def quantise(self, value): From dfd119bd1694508826c5c7ad01166a37d87b8388 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 6 Aug 2018 11:42:34 -0400 Subject: [PATCH 411/642] random cpr sampling confusion --- karmapi/cpr.py | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 3da330b..e2d8853 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -274,32 +274,54 @@ def setup_wave(self): def sample(self, x1, y1, x2, y2): - """ Return a pixel given a rectangle """ - + """ Return a pixel given a rectangle + + x1, y1, x2, y2 are real + + Want to select a point from a rectangle around this + point. + + allowing the rectangle to wrap around, identifying the left right + edges as well as the top and bottom. + + (perhaps make this optional?) + """ + + # radians per x-step deltax = 1 / self.size[0] deltax *= 2 * math.pi + # radians per y-step deltay = 1 / self.size[1] deltay *= 2 * math.pi + # width height of rectangle. xdelta = x2 - x1 ydelta = y2 - y1 - k = int(xdelta / deltax) + 1 + # expansion or contraction modulus + xk = int(xdelta / deltax) + + xk = xk or 1 xx = int(x1 / deltax) - xx = randint(xx, xx + k - 1) + xk2 = xk // 2 + xx = randint(xx-xk2, xx + xk - (1 + xk2)) - yy = int(y1 / deltay) + yk = int(ydelta / deltay) + yk = yk or 1 - k = int(ydelta / deltay) + 1 + yy = int(y1 / deltay) - yy = randint(yy, yy + k - 1) + yk2 = yk // 2 + yy = randint(yy - yk2, yy + yk - (1 + yk2)) ix = (yy * self.size[0]) + xx - return self.red[ix], self.green[ix], self.blue[ix] + return self.red[ix], self.green[ix], self.blue[ix] + + async def wave_run(self): """ wave From add6f34966ff6b282abfa6471f62e8e2e658dc77 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 6 Aug 2018 11:49:38 -0400 Subject: [PATCH 412/642] cpr with just prime grids --- karmapi/cpr.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index e2d8853..9bac2f9 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -468,7 +468,7 @@ def build(self): last_ball = None ball = 0 - for nn in range(2, 1000_0000): + for nn in range(self.base, 1000_0000): if not prime.isprime(nn): continue @@ -476,7 +476,7 @@ def build(self): print('prime', nn) - size = self.base + (nn * self.inc) + size = nn size = (size, size) From b03aca376c16d35712588d0f07527d4f229159b0 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 7 Aug 2018 14:08:20 -0400 Subject: [PATCH 413/642] tankrain save option and make pig space more sleepy --- karmapi/pigfarm.py | 2 +- karmapi/tankrain.py | 60 ++++++++++++++++++++++++++++++++++++++------- 2 files changed, 52 insertions(+), 10 deletions(-) diff --git a/karmapi/pigfarm.py b/karmapi/pigfarm.py index baf201d..2709507 100644 --- a/karmapi/pigfarm.py +++ b/karmapi/pigfarm.py @@ -334,7 +334,7 @@ def __init__(self): self.scale = 400 self.fade = 30 - self.sleep = 0.05 + self.sleep = 1.0 self.napcount = 0 self.naptime = self.sleep self.images = {} diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index 186140b..38ab93d 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -1,4 +1,21 @@ """ Bermuda weather + + +Or at least that is how it started. + +Download and view Bermuda Weather radar. + +tankrain being heavy rains that fill the water tanks beneath Bermuda homes. + +Now it has morphed into an image viewer. + +Sort your image into folders by year month day + +Tankrain will let you navigate. + +It also works for viewing models and data. + +Just store the images for each day. """ import itertools import argparse @@ -33,11 +50,13 @@ class TankRain(pigfarm.MagicCarpet): """ Widget to show tankrain images """ - def __init__(self, parent, path=None, version='local', date=None, *args): + def __init__(self, parent, path=None, version='local', date=None, + save=None, *args): self.version = version self.paused = False - self.path = path or '~/karmapi/tankrain' + self.path = path or '.' + self.save_folder = save self.timewarp = 0 self.cut = 0 self.date = date @@ -57,6 +76,7 @@ def __init__(self, parent, path=None, version='local', date=None, *args): self.add_event_map('l', self.fewer_images) self.add_event_map('m', self.more_images) self.add_event_map('X', self.switcheroo) + self.add_event_map('S', self.save) def load_images(self): @@ -96,16 +116,17 @@ def when(self): return date - def where(self, when=None): + def where(self, when=None, path=None): """ Path for date """ date = when or self.when() - path = Path(f'{self.path}/{date.year}/{date.month}/{date.day}/').expanduser() + path = path or self.path + path = Path(f'{path}/{date.year}/{date.month}/{date.day}/').expanduser() return path - def get_images(self, when=None): + def get_images(self, when=None, path=None): # FIXME -- create key bindings to select time date = when or self.when() @@ -124,6 +145,22 @@ def get_images(self, when=None): yield image + async def save(self): + """ Save image somewhere else + + This one saves the current data, not the PIL file + so can be used to make transforms along the way. + """ + # save relative to cwd + target = self.where(self.when(), self.save_folder or '.') + + + target /= self.paths[self.ix].name + # fixme -- where's the path + print('saving to', target) + target.parent.mkdir(parents=True, exist_ok=True) + self.data.save(target) + async def switcheroo(self): """ switcheroo @@ -204,14 +241,15 @@ async def more_images(self): self.cut = self.ix % abs(self.inc) async def start(self): - """ FIXME: get yoser to run fetch """ + """ FIXME: get yosser to run? """ #farm.yosser.run(fetch, minutes=20, sleep=300) + pass async def run(self): - # use yosser? - await pigfarm.aside(runfetch) + # use yosser? ironically awaiting yosser + #await pigfarm.aside(runfetch) self.dark() while True: @@ -350,6 +388,9 @@ def main(args=None): parser.add_argument('--minutes', type=int, default=30) parser.add_argument('path', nargs='?', default='.') parser.add_argument('--version', default='') + parser.add_argument('--save', + help='folder to save to') + parser.add_argument('--date') args = parser.parse_args() @@ -360,7 +401,8 @@ def main(args=None): farm = pigfarm.PigFarm() farm.add( TankRain, - dict(path=args.path, version=args.version, date=args.date)) + dict(path=args.path, version=args.version, date=args.date, + save=args.save)) from karmapi.mclock2 import GuidoClock farm.add(GuidoClock) From c224c278bc5f93b684b0559604bf8374f94a844e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 7 Aug 2018 15:32:20 -0400 Subject: [PATCH 414/642] tankrain title toggling with T --- karmapi/tankrain.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index 38ab93d..84a67b1 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -63,6 +63,8 @@ def __init__(self, parent, path=None, version='local', date=None, if self.date is None: self.date = utcnow() + self.title = 'k' + self.load_images() super().__init__(parent, axes=[111]) @@ -77,6 +79,7 @@ def __init__(self, parent, path=None, version='local', date=None, self.add_event_map('m', self.more_images) self.add_event_map('X', self.switcheroo) self.add_event_map('S', self.save) + self.add_event_map('T', self.toggle_title) def load_images(self): @@ -240,6 +243,13 @@ async def more_images(self): self.cut = self.ix % abs(self.inc) + async def toggle_title(self): + """ toggle titles """ + if self.title == 'k': + self.title = 'gold' + else: + self.title = 'k' + async def start(self): """ FIXME: get yosser to run? """ #farm.yosser.run(fetch, minutes=20, sleep=300) @@ -257,17 +267,18 @@ async def run(self): await curio.sleep(self.sleep) continue - #title = self.paths[self.ix] if self.paths: title = self.paths[self.ix] else: title = f'{self.ix} : {len(self.paths)} {self.path}' - + self.compute_data() self.axes.clear() print('TITLE:', title) try: - self.axes.set_title(title) + #self.axes.set_title(title, color=self.title) + self.axes.set_title(title, color=self.title or 'k') + self.axes.imshow(self.data) except OSError: print('dodgy image:', self.paths[self.ix]) From 860a728494ed0813351e6feac3be2167ec8306cb Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 8 Aug 2018 14:27:28 -0400 Subject: [PATCH 415/642] random prime balls for cpr --- karmapi/cpr.py | 61 ++++++++++++++++++++++++++++++++++------------- karmapi/roikpi.py | 4 +++- 2 files changed, 48 insertions(+), 17 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 9bac2f9..cff2a42 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -318,7 +318,7 @@ def sample(self, x1, y1, x2, y2): yy = randint(yy - yk2, yy + yk - (1 + yk2)) ix = (yy * self.size[0]) + xx - + return self.red[ix], self.green[ix], self.blue[ix] @@ -419,20 +419,17 @@ class NestedWaves(pigfarm.Yard): and draw slices on the canvas from the yard. """ - def __init__(self, parent, n=10, base=4, inc=4): + def __init__(self, parent, balls=None): """ Initialise the thing """ super().__init__(parent) - self.base = base - self.n = n - self.inc = inc - + self.n = len(balls) # expect we'll find something to do with a queue self.uq = curio.UniversalQueue() - self.build() + self.build(balls) self.add_event_map(' ', self.pause) self.paused = False self.add_event_map('r', self.reset) @@ -461,21 +458,15 @@ async def backward(self): if self.dball < 0: self.dball = self.n - 1 - def build(self): + def build(self, balls): """ Create the balls """ # add a bunch of spheres to the queue self.balls = [] last_ball = None ball = 0 - for nn in range(self.base, 1000_0000): + for nn in balls: - if not prime.isprime(nn): - continue - - - print('prime', nn) - size = nn size = (size, size) @@ -594,6 +585,31 @@ async def run(self): await curio.sleep(self.sleep) +def prime_balls(base, n): + """ Generate next n primes starting at base""" + + for nn in range(base, 1000_0000): + + if not prime.isprime(nn): + continue + + print('prime', nn) + yield nn + + n -= 1 + if n == 0: + return + +def pi_balls(base, n): + """ Generate next n pi-based balls starting at base + + pi = 4 * sum((-1)^n * (1/(1 + (2*n)))) + """ + # for now, punt to prime balls + return prime_balls(base, n) + + + class CelestialSphere(NestedWaves): """ An outer sphere of nested waves @@ -720,6 +736,12 @@ def argument_parser(): return parser +def random_prime_balls(nmin, nmax): + """ generate a random prime balls """ + while True: + base = random.randint(nmin, nmax) + ball = list(prime_balls(base, random.randint(3, 13))) + yield ball def main(): @@ -727,7 +749,14 @@ def main(): args = parser.parse_args() - farm = pigfarm.sty(NestedWaves, dict(n=args.n, inc=args.inc, base=args.base)) + # pass list of balls into NestedWaves + + balls = list(prime_balls(args.base, args.n)) + + #for ball in random_prime_balls(args.base, 127): + # balls.append(ball) + + farm = pigfarm.sty(NestedWaves, dict(balls=balls)) curio.run(farm.run(), with_monitor=True) diff --git a/karmapi/roikpi.py b/karmapi/roikpi.py index 95f5442..9501779 100644 --- a/karmapi/roikpi.py +++ b/karmapi/roikpi.py @@ -59,9 +59,11 @@ def main(): back_image=args.background, events=args.events)) + balls = list(cpr.prime_balls(args.base, args.n)) + farm.add( cpr.NestedWaves, - dict(n=args.n, inc=args.inc, base=args.base)) + dict(balls=balls)) curio.run(farm.run(), with_monitor=True) From 0cdbd06915dc60b208a51ce29dde3799a65ead61 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 9 Aug 2018 10:56:09 -0400 Subject: [PATCH 416/642] get d number of d balls right? --- karmapi/cpr.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index cff2a42..d667712 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -424,8 +424,6 @@ def __init__(self, parent, balls=None): super().__init__(parent) - self.n = len(balls) - # expect we'll find something to do with a queue self.uq = curio.UniversalQueue() @@ -450,13 +448,13 @@ async def reset(self): async def forward(self): """ Move to next sphere """ self.dball += 1 - self.dball %= self.n + self.dball %= len(self.balls) async def backward(self): """ Move to previous sphere """ self.dball -= 1 if self.dball < 0: - self.dball = self.n - 1 + self.dball = len(self.balls) - 1 def build(self, balls): """ Create the balls """ @@ -491,8 +489,7 @@ def build(self, balls): # next ball ball += 1 - if ball == self.n: - break + async def random_step_some(self): """ Step all balls once """ From 512e0b357e6d474512baea9742a2e6535ec168ac Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 9 Aug 2018 11:00:41 -0400 Subject: [PATCH 417/642] add upgrade info to install story and bump version --- docs/install.rst | 13 +++++++++++++ setup.py | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/docs/install.rst b/docs/install.rst index f7b84aa..8de1508 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -490,6 +490,10 @@ type 'h' on Guido's clock. Post Install ============ +To upgrade to latest release using pip:: + + pip3.6 install --upgrade karmapi + If you want to take a look at the latest code:: git clone https://github.com/karmapi/swfiua @@ -545,3 +549,12 @@ Raspberry Pi That is a whole other adventure. But Raspbian Stretch may have python 3.6. Fingers crossed. + +Latest fun commands:: + + python3 -m karmapi.cpr -n 7 --base 31 + +To get an overview of what a module is about:: + + >>> from karmapi import cpr + >>> help(cpr) diff --git a/setup.py b/setup.py index 89a724f..c31b2b3 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from codecs import open from os import path -__version__ = '0.9.3.1.4' +__version__ = '0.9.3.1.4.1' here = path.abspath(path.dirname(__file__)) From 882f7ccee0d6a0802dab277c2c8fde112cb1b38a Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 9 Aug 2018 15:42:55 -0400 Subject: [PATCH 418/642] add polar view to cpr to see spirals --- karmapi/cpr.py | 76 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 72 insertions(+), 4 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index d667712..28bbf79 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -129,27 +129,80 @@ def random_grid(self): self.blue.append(randunit()) - def project(self): + def project(self, view=None): """ Turn into a PIL? """ + + views = dict( + grid=self.rgb2grid, + northpole=self.northpole, + southpole=self.southpole) + image = Image.new('RGB', (self.size[0], self.size[1])) # FIXME do the 256 magic int stuff here #print('rgb', len(self.red), len(self.green), len(self.blue)) - image.putdata(self.rgb2grid()) + project = views.get(view, self.rgb2grid) + + image.putdata(project()) return image def rgb2grid(self): - """ Change lists of red green blue to a quantised pixel grid""" + """ Change lists of red green blue to a pixel grid""" grid = [] for rgb in zip(self.red, self.green, self.blue): pixel = tuple(self.quantise(x) for x in rgb) grid.append(pixel) return grid + + def poleview(self, pixels): + """ View from a pole """ + + # make black everywhere + width, height = self.size + grid = [(0, 0, 0)] * width * height + + xorig = int(width / 2) + yorig = int(height/ 2) + for ix, rgb in enumerate(pixels): + + pixel = tuple(self.quantise(x) for x in rgb) + xx = ix % width + yy = ix // height + + #if yy >= height / 2: + # break + + # so radius yy from centre and xx how far round the circle + angle = xx * 2 * math.pi / width + + xoff = yy * math.cos(angle) / 2 + yoff = yy * math.sin(angle) / 2 + + xpos = int(xorig + xoff) + ypos = int(yorig + yoff) + + target = xpos + ypos * width + + grid[target] = pixel + + return grid + + def northpole(self): + """ Give a circular view from the north pole """ + pixels = zip(self.red, self.green, self.blue) + + return self.poleview(pixels) + + def southpole(self): + """ Give a circular view from the south pole """ + pixels = zip(self.red[::-1], self.green[::-1], self.blue[::-1]) + + return self.poleview(pixels) async def run(self): """ Run a sphere @@ -427,6 +480,9 @@ def __init__(self, parent, balls=None): # expect we'll find something to do with a queue self.uq = curio.UniversalQueue() + self.views = ['grid', 'northpole', 'southpole'] + self.view = 0 + self.build(balls) self.add_event_map(' ', self.pause) self.paused = False @@ -435,6 +491,8 @@ def __init__(self, parent, balls=None): self.dball = 0 self.add_event_map('j', self.backward) self.add_event_map('k', self.forward) + self.add_event_map('v', self.next_view) + self.add_event_map('b', self.previous_view) async def pause(self): """ Pause """ @@ -456,6 +514,16 @@ async def backward(self): if self.dball < 0: self.dball = len(self.balls) - 1 + async def next_view(self): + """ next view """ + self.view += 1 + self.view %= len(self.views) + + async def previous_view(self): + """ previous view """ + self.view += 1 + self.view %= len(self.views) + def build(self, balls): """ Create the balls """ # add a bunch of spheres to the queue @@ -545,7 +613,7 @@ async def draw_ball(self, ball): """ width, height = self.width, self.height - image = ball.project() + image = ball.project(self.views[self.view]) image = image.resize((int(width), int(height))) From f5e89f14af7e1964fda657032363ff4da749cfe7 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 9 Aug 2018 15:54:22 -0400 Subject: [PATCH 419/642] prime grids and polar views --- karmapi/cpr.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 28bbf79..837d0b6 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -36,6 +36,28 @@ python3.6 cpr --base 0 --inc 23 -n 7 +Update: 2018/8/9 + +The motivation for using grids with prime dimensions was that it makes it makes +it challenging for the spheres to stay in sync with each other. + +Their periods are co-prime. + +As a result, spirals emerge. + +In the initial runs there was a strong diagonal property developing. + +A smooth, square, space in the top left corner. + +A more random square bottom right, with the corners of these two squares meeting. + +Much symmetry for the bands to the top and left of the view. + +My interpretation is these bands show the layers largely being in sync. + +Regardless, another view of these grids is to view them from the north or south +pole. When you do that there are spirals everywhere. + """ import math From ae9a24b19dd8dc20928113283ae5b46cf227f444 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 9 Aug 2018 16:04:34 -0400 Subject: [PATCH 420/642] bump version again --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index c31b2b3..6900888 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from codecs import open from os import path -__version__ = '0.9.3.1.4.1' +__version__ = '0.9.3.1.4.1.5' here = path.abspath(path.dirname(__file__)) From 7b3eaa94b8429bc677925e38683c487e758f441e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 9 Aug 2018 22:22:37 -0400 Subject: [PATCH 421/642] more views use v and b in cpr for hemi poles --- karmapi/cpr.py | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 837d0b6..6f8530a 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -157,7 +157,9 @@ def project(self, view=None): views = dict( grid=self.rgb2grid, northpole=self.northpole, - southpole=self.southpole) + southpole=self.southpole, + uphemi=self.uphemi, + downhemi=self.downhemi) image = Image.new('RGB', (self.size[0], self.size[1])) @@ -166,6 +168,7 @@ def project(self, view=None): #print('rgb', len(self.red), len(self.green), len(self.blue)) project = views.get(view, self.rgb2grid) + print(view) image.putdata(project()) @@ -180,7 +183,7 @@ def rgb2grid(self): return grid - def poleview(self, pixels): + def poleview(self, pixels, scale=1): """ View from a pole """ # make black everywhere @@ -202,13 +205,17 @@ def poleview(self, pixels): # so radius yy from centre and xx how far round the circle angle = xx * 2 * math.pi / width - xoff = yy * math.cos(angle) / 2 - yoff = yy * math.sin(angle) / 2 + xoff = yy * math.cos(angle) / scale + yoff = yy * math.sin(angle) / scale xpos = int(xorig + xoff) ypos = int(yorig + yoff) target = xpos + ypos * width + + ix = ix % (width * height) + + target %= width * height grid[target] = pixel @@ -218,12 +225,26 @@ def northpole(self): """ Give a circular view from the north pole """ pixels = zip(self.red, self.green, self.blue) - return self.poleview(pixels) + return self.poleview(pixels, scale=2) def southpole(self): """ Give a circular view from the south pole """ pixels = zip(self.red[::-1], self.green[::-1], self.blue[::-1]) + return self.poleview(pixels, scale=2) + + def uphemi(self): + """ show top hemisphere """ + nn = int(len(self.red) / 2) + pixels = zip(self.red[:nn], self.green[:nn], self.blue[:nn]) + + return self.poleview(pixels) + + def downhemi(self): + """ show top hemisphere """ + nn = int(len(self.red) / 2) + pixels = zip(self.red[nn::-1], self.green[nn::-1], self.blue[nn::-1]) + return self.poleview(pixels) async def run(self): @@ -502,7 +523,7 @@ def __init__(self, parent, balls=None): # expect we'll find something to do with a queue self.uq = curio.UniversalQueue() - self.views = ['grid', 'northpole', 'southpole'] + self.views = ['grid', 'northpole', 'southpole', 'uphemi', 'downhemi'] self.view = 0 self.build(balls) @@ -543,8 +564,10 @@ async def next_view(self): async def previous_view(self): """ previous view """ - self.view += 1 - self.view %= len(self.views) + if self.view: + self.view -= 1 + else: + self.view = len(self.views) - 1 def build(self, balls): """ Create the balls """ From 56de23e51c983e922459af65399b7047f3771a83 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 10 Aug 2018 14:11:10 -0400 Subject: [PATCH 422/642] cpr add stride and note n important --- karmapi/cpr.py | 61 +++++++++++++++++++++++++++++++------------------ karmapi/ncdf.py | 9 ++++---- 2 files changed, 44 insertions(+), 26 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 6f8530a..a0f8b67 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -521,7 +521,7 @@ def __init__(self, parent, balls=None): super().__init__(parent) # expect we'll find something to do with a queue - self.uq = curio.UniversalQueue() + #self.uq = curio.UniversalQueue() self.views = ['grid', 'northpole', 'southpole', 'uphemi', 'downhemi'] self.view = 0 @@ -574,34 +574,20 @@ def build(self, balls): # add a bunch of spheres to the queue self.balls = [] last_ball = None - ball = 0 - for nn in balls: - - size = nn - - size = (size, size) - - M, mu = 1.0, 0.1 - - #if ball and ball != self.n -1: - if ball: - M, mu = None, None - - sphere = Sphere(size, m=M, mu=mu) - + for sphere in balls: + if last_ball: sphere.last_ball = last_ball last_ball.next_ball = sphere # may need to revisit this, spread some work - self.uq.put(sphere) + # self.uq.put(sphere) + print('adding ball', sphere.size) self.balls.append(sphere) last_ball = sphere - # next ball - ball += 1 async def random_step_some(self): @@ -695,6 +681,27 @@ async def run(self): await curio.sleep(self.sleep) +def generate_spheres(sizes): + + first = True + for nn in sizes: + + size = nn + + size = (size, size) + + M, mu = 1.0, 0.1 + + #if ball and ball != self.n -1: + if not first: + M, mu = None, None + first = False + + sphere = Sphere(size, m=M, mu=mu) + + yield sphere + + def prime_balls(base, n): """ Generate next n primes starting at base""" @@ -840,8 +847,8 @@ def argument_parser(): help='what to show') parser.add_argument('-a', type=int, default=1) parser.add_argument('-n', type=int, default=10) + parser.add_argument('--stride', type=int) parser.add_argument('-m', type=int, default=1) - parser.add_argument('--inc', type=int, default=4) parser.add_argument('--base', type=int, default=20) return parser @@ -861,12 +868,22 @@ def main(): # pass list of balls into NestedWaves - balls = list(prime_balls(args.base, args.n)) + if args.stride: + stride = args.stride + start = args.base + end = start + (args.n * args.stride) + + balls = range(start, end, stride) + else: + balls = prime_balls(args.base, args.n) + + print('balls', balls) + spheres = list(generate_spheres(balls)) #for ball in random_prime_balls(args.base, 127): # balls.append(ball) - farm = pigfarm.sty(NestedWaves, dict(balls=balls)) + farm = pigfarm.sty(NestedWaves, dict(balls=spheres)) curio.run(farm.run(), with_monitor=True) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 2bc1568..ffe905d 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -324,13 +324,13 @@ def __init__(self, parent, stamps=None, values=None, super().__init__(parent, **kwargs) - def build(self): + def build(self, balls): """ Create the balls """ # add a bunch of spheres to the queue self.balls = [] last_ball = None - for ball in range(self.n): - size = self.base + (ball * self.inc) + for nn in balls: + size = nn head = True @@ -412,9 +412,10 @@ def build(self): print('min max:') print(values[0].min(), values[0].max()) + balls = list(cpr.prime_balls(args.base, args.n)) parms = dict(stamps=stamps, values=values, save=args.save, - n=args.n, inc=args.inc, base=args.base) + balls=balls) farm = pigfarm.sty(World, parms) From 0166b2b2dcf7a44a7bfe37125c2b56e0309cc347 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 10 Aug 2018 15:17:24 -0400 Subject: [PATCH 423/642] ncdf working with latest cpr? --- karmapi/cpr.py | 28 +++++++++++++++++----------- karmapi/ncdf.py | 43 +++++++++---------------------------------- karmapi/roikpi.py | 2 +- 3 files changed, 27 insertions(+), 46 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index a0f8b67..72366c1 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -273,7 +273,6 @@ async def run(self): lb = self.last_ball nb = self.next_ball - lsize = self.last_ball.size n1, n2 = self.size grid = [] @@ -289,7 +288,10 @@ async def run(self): y1 = (y / n2) * 2 * math.pi y2 = y1 + deltay - lbc = lb.sample(x1, y1, x2, y2) + if lb: + lbc = lb.sample(x1, y1, x2, y2) + else: + lbc = tuple(randunit() for c in 'rgb') if nb: nbc = nb.sample(x1, y1, x2, y2) @@ -859,15 +861,10 @@ def random_prime_balls(nmin, nmax): base = random.randint(nmin, nmax) ball = list(prime_balls(base, random.randint(3, 13))) yield ball - -def main(): - parser = argument_parser() - - args = parser.parse_args() - - # pass list of balls into NestedWaves +def args_to_spheres(args): + if args.stride: stride = args.stride start = args.base @@ -879,10 +876,19 @@ def main(): print('balls', balls) spheres = list(generate_spheres(balls)) + + return spheres - #for ball in random_prime_balls(args.base, 127): - # balls.append(ball) + +def main(): + + parser = argument_parser() + args = parser.parse_args() + + # pass list of balls into NestedWaves + spheres = args_to_spheres(args) + farm = pigfarm.sty(NestedWaves, dict(balls=spheres)) curio.run(farm.run(), with_monitor=True) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index ffe905d..ff99da4 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -315,47 +315,21 @@ def scale(self, data): class World(cpr.NestedWaves): def __init__(self, parent, stamps=None, values=None, + balls=None, save=None, **kwargs): self.stamps = list(stamps) self.values = values self.save = save - super().__init__(parent, **kwargs) - - - def build(self, balls): - """ Create the balls """ - # add a bunch of spheres to the queue - self.balls = [] - last_ball = None - for nn in balls: - size = nn - - head = True - - if ball: - head = False - - tail = False - if ball == self.n - 1: - tail = True - + + sphere = WorldView(self.stamps, self.values) + balls.append(sphere) + balls[0].M = None - if tail or head: - sphere = WorldView(self.stamps, self.values, head=head, tail=tail) - sphere.save = self.save or False - else: - sphere = cpr.Sphere((size, size), head=head, tail=tail) + super().__init__(parent, balls=balls, **kwargs) - if not sphere.head: - sphere.last_ball = last_ball - last_ball.next_ball = sphere - - self.uq.put(sphere) - self.balls.append(sphere) - last_ball = sphere if __name__ == '__main__': @@ -412,10 +386,11 @@ def build(self, balls): print('min max:') print(values[0].min(), values[0].max()) - balls = list(cpr.prime_balls(args.base, args.n)) + + spheres = cpr.args_to_spheres(args) parms = dict(stamps=stamps, values=values, save=args.save, - balls=balls) + balls=spheres) farm = pigfarm.sty(World, parms) diff --git a/karmapi/roikpi.py b/karmapi/roikpi.py index 9501779..f75b82e 100644 --- a/karmapi/roikpi.py +++ b/karmapi/roikpi.py @@ -59,7 +59,7 @@ def main(): back_image=args.background, events=args.events)) - balls = list(cpr.prime_balls(args.base, args.n)) + spheres = cpr.args_to_spheres(args) farm.add( cpr.NestedWaves, From 66955cdd299a5fd01f240e7320d6a7b1c8f6079a Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 10 Aug 2018 15:20:49 -0400 Subject: [PATCH 424/642] round and round with versions --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 6900888..d30e260 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from codecs import open from os import path -__version__ = '0.9.3.1.4.1.5' +__version__ = '0.9.3.1.4.1.5.9' here = path.abspath(path.dirname(__file__)) From a601d4dfcd1ebf43ce85656be95efd91bb0f6c31 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 11 Aug 2018 21:31:15 -0400 Subject: [PATCH 425/642] add winding to get north south flipping spirals --- karmapi/cpr.py | 22 ++++++++++++---------- karmapi/ncdf.py | 2 ++ 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 72366c1..ad7f8b8 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -159,7 +159,7 @@ def project(self, view=None): northpole=self.northpole, southpole=self.southpole, uphemi=self.uphemi, - downhemi=self.downhemi) + lowhemi=self.lowhemi) image = Image.new('RGB', (self.size[0], self.size[1])) @@ -183,12 +183,14 @@ def rgb2grid(self): return grid - def poleview(self, pixels, scale=1): + def poleview(self, pixels, scale=1, wind=1): """ View from a pole """ # make black everywhere width, height = self.size - grid = [(0, 0, 0)] * width * height + + + grid = [(127, 127, 127)] * width * height xorig = int(width / 2) yorig = int(height/ 2) @@ -203,7 +205,7 @@ def poleview(self, pixels, scale=1): # break # so radius yy from centre and xx how far round the circle - angle = xx * 2 * math.pi / width + angle = wind * xx * 2 * math.pi / width xoff = yy * math.cos(angle) / scale yoff = yy * math.sin(angle) / scale @@ -231,21 +233,21 @@ def southpole(self): """ Give a circular view from the south pole """ pixels = zip(self.red[::-1], self.green[::-1], self.blue[::-1]) - return self.poleview(pixels, scale=2) + return self.poleview(pixels, scale=2, wind=-1) def uphemi(self): - """ show top hemisphere """ + """ show upper hemisphere """ nn = int(len(self.red) / 2) pixels = zip(self.red[:nn], self.green[:nn], self.blue[:nn]) return self.poleview(pixels) - def downhemi(self): - """ show top hemisphere """ + def lowhemi(self): + """ show lower hemisphere """ nn = int(len(self.red) / 2) pixels = zip(self.red[nn::-1], self.green[nn::-1], self.blue[nn::-1]) - return self.poleview(pixels) + return self.poleview(pixels, wind=-1) async def run(self): """ Run a sphere @@ -525,7 +527,7 @@ def __init__(self, parent, balls=None): # expect we'll find something to do with a queue #self.uq = curio.UniversalQueue() - self.views = ['grid', 'northpole', 'southpole', 'uphemi', 'downhemi'] + self.views = ['grid', 'northpole', 'southpole', 'uphemi', 'lowhemi'] self.view = 0 self.build(balls) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index ff99da4..1d5c665 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -363,6 +363,8 @@ def __init__(self, parent, stamps=None, values=None, stamps = stamp_sort(stamps) + print("number of observations:", len(stamps)) + path = path / args.value if args.pc: From f981bc1ba54461051928eccb31bcdbe1cff807f5 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 12 Aug 2018 13:22:35 -0400 Subject: [PATCH 426/642] add some physices and discover quantise heisenbug --- karmapi/cpr.py | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index ad7f8b8..1a734e1 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -281,7 +281,9 @@ async def run(self): ix = 0 deltax = (1 / (2 * n1)) * 2 * math.pi deltay = (1 / (2 * n2)) * 2 * math.pi - + + cweight = self.weight(self) + for x in range(self.size[0]): x1 = (x / n1) * 2 * math.pi x2 = x1 + deltax @@ -292,25 +294,42 @@ async def run(self): if lb: lbc = lb.sample(x1, y1, x2, y2) + lbweight = lb.weight(self) else: lbc = tuple(randunit() for c in 'rgb') - + lbweight = 1 if nb: nbc = nb.sample(x1, y1, x2, y2) + nbweight = nb.weight(self) else: nbc = tuple(randunit() for c in 'rgb') + nbweight = 1 cix = (y * self.size[0]) + x current = (self.red[cix], self.green[cix], self.blue[cix]) - value = [(aa + bb + cc) * self.fade - for aa, bb, cc in zip(lbc, nbc, current)] - + value = [((aa * lbweight) + + (bb * cweight) + + (cc * nbweight)) + for aa, bb, cc in zip(lbc, current, nbc)] + grid.append(value) self.grid2rgb(grid) #self.normalise() + def weight(self, ball): + + delta_r = ball.r - self.r + + if delta_r == 0: + return self.M or 1 + + weight = (self.M or 1) / (delta_r ** self.fade) + + return weight + + def grid2rgb(self, value): for ix, (r, g, b) in enumerate(value): @@ -688,7 +707,7 @@ async def run(self): def generate_spheres(sizes): first = True - for nn in sizes: + for r, nn in enumerate(sizes): size = nn @@ -701,7 +720,7 @@ def generate_spheres(sizes): M, mu = None, None first = False - sphere = Sphere(size, m=M, mu=mu) + sphere = Sphere(size, r=r, m=M, mu=mu) yield sphere From 4898b99c3fab7f8294c4b6eef7bb49837cc80dae Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 12 Aug 2018 13:38:38 -0400 Subject: [PATCH 427/642] why is it all going black? --- karmapi/cpr.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 1a734e1..c02147d 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -101,7 +101,10 @@ def __init__(self, size=None, self.last_ball = None self.next_ball = None - self.fade = 1 / math.e + + #self.fade = 1 / math.e + self.fade = 1 + self.t = t # Default for mass?? @@ -282,7 +285,11 @@ async def run(self): deltax = (1 / (2 * n1)) * 2 * math.pi deltay = (1 / (2 * n2)) * 2 * math.pi - cweight = self.weight(self) + cbweight = self.weight(self) + lbweight = (lb or self).weight(self) + nbweight = (nb or self).weight(self) + + print(cbweight, lbweight, nbweight) for x in range(self.size[0]): x1 = (x / n1) * 2 * math.pi @@ -294,24 +301,20 @@ async def run(self): if lb: lbc = lb.sample(x1, y1, x2, y2) - lbweight = lb.weight(self) else: lbc = tuple(randunit() for c in 'rgb') - lbweight = 1 if nb: nbc = nb.sample(x1, y1, x2, y2) - nbweight = nb.weight(self) else: nbc = tuple(randunit() for c in 'rgb') - nbweight = 1 cix = (y * self.size[0]) + x - current = (self.red[cix], self.green[cix], self.blue[cix]) + cbc = (self.red[cix], self.green[cix], self.blue[cix]) value = [((aa * lbweight) + - (bb * cweight) + + (bb * cbweight) + (cc * nbweight)) - for aa, bb, cc in zip(lbc, current, nbc)] + for aa, bb, cc in zip(lbc, cbc, nbc)] grid.append(value) @@ -320,12 +323,13 @@ async def run(self): def weight(self, ball): - delta_r = ball.r - self.r + delta_r = abs(ball.r - self.r) if delta_r == 0: return self.M or 1 weight = (self.M or 1) / (delta_r ** self.fade) + #print(delta_r, self.M or 1, self.fade, weight) return weight From ffb67955d80c7577398f82fffe3d278ba166919d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 12 Aug 2018 13:43:24 -0400 Subject: [PATCH 428/642] e by gum factor restores light --- karmapi/cpr.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index c02147d..d7749af 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -313,7 +313,7 @@ async def run(self): value = [((aa * lbweight) + (bb * cbweight) + - (cc * nbweight)) + (cc * nbweight)) * (1 / math.e) for aa, bb, cc in zip(lbc, cbc, nbc)] grid.append(value) From 16b26216f238389993e347413a8cc01b8c403833 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 12 Aug 2018 13:43:48 -0400 Subject: [PATCH 429/642] e by gum factor restores light --- karmapi/cpr.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index d7749af..98494db 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -103,7 +103,7 @@ def __init__(self, size=None, self.next_ball = None #self.fade = 1 / math.e - self.fade = 1 + self.fade = 3 self.t = t From 324437cedb58747557cb7f74d26ddf8e55f489a0 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 12 Aug 2018 14:25:04 -0400 Subject: [PATCH 430/642] bring neutron star to life --- karmapi/cpr.py | 85 ++++++++++++++++++++++++------------------------- karmapi/ncdf.py | 5 +-- 2 files changed, 45 insertions(+), 45 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 98494db..5bf97c2 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -103,7 +103,7 @@ def __init__(self, size=None, self.next_ball = None #self.fade = 1 / math.e - self.fade = 3 + self.fade = 1 self.t = t @@ -129,13 +129,6 @@ def __init__(self, size=None, def reset(self, init=False): """ Reset the sphere """ - if self.M: - self.setup_wave() - - # first time only, carry on? - if self.red: - return - self.red.clear() self.green.clear() self.blue.clear() @@ -266,9 +259,6 @@ async def run(self): self.t += 1 - if self.M: - return await self.wave_run() - # Here if we are between two spheres # so have last_ball and next_ball @@ -289,7 +279,7 @@ async def run(self): lbweight = (lb or self).weight(self) nbweight = (nb or self).weight(self) - print(cbweight, lbweight, nbweight) + #print(cbweight, lbweight, nbweight) for x in range(self.size[0]): x1 = (x / n1) * 2 * math.pi @@ -445,7 +435,33 @@ def sample(self, x1, y1, x2, y2): return self.red[ix], self.green[ix], self.blue[ix] - async def wave_run(self): + + +class NeutronStar(Sphere): + """ + + An sphere with a mass + + Just supply the mass. + + or... maybe a bit more complex. + + So, nest some waves and figure out project and sample. + + So what radii are interesting? + + Each star, or galaxy can have its own process, and a pi can run a + good few stars. + + + """ + def reset(self, init=False): + """ Reset the sphere """ + + super().reset(init) + self.setup_wave() + + async def run(self): """ wave red, green, blue @@ -457,6 +473,8 @@ async def wave_run(self): How to fill in self.grid? """ + self.t += 1 + n1, n2 = self.size width = 2 * math.pi height = math.pi @@ -488,29 +506,6 @@ async def wave_run(self): self.grid2rgb(grid) - -class NeutronStar: - """ - - An inner sphere - - Just supply the mass. - - or... maybe a bit more complex. - - So, nest some waves and figure out project and sample. - - So what radii are interesting? - - Each star, or galaxy can have its own process, and a pi can run a - good few stars. - - - """ - def __init__(self): - pass - - def randunit(): @@ -708,8 +703,10 @@ async def run(self): await curio.sleep(self.sleep) -def generate_spheres(sizes): +def generate_spheres(sizes, clazz=None): + clazz = clazz or NeutronStar + first = True for r, nn in enumerate(sizes): @@ -719,12 +716,14 @@ def generate_spheres(sizes): M, mu = 1.0, 0.1 - #if ball and ball != self.n -1: - if not first: - M, mu = None, None - first = False - - sphere = Sphere(size, r=r, m=M, mu=mu) + R = 1 * r + + #M = M / (R+1) + mu = M / 10 + + sphere = clazz(size, r=R, m=M, mu=mu) + + clazz = Sphere yield sphere diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 1d5c665..55136e7 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -324,8 +324,9 @@ def __init__(self, parent, stamps=None, values=None, sphere = WorldView(self.stamps, self.values) - balls.append(sphere) - balls[0].M = None + sphere.M = 1 + sphere.r = 0 + balls[0] = sphere super().__init__(parent, balls=balls, **kwargs) From b7bb702b2f9b098bb0d06575d5d2db22c15c36bd Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 12 Aug 2018 14:26:49 -0400 Subject: [PATCH 431/642] another release at this rate will run out of digits --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index d30e260..1d4c9ec 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from codecs import open from os import path -__version__ = '0.9.3.1.4.1.5.9' +__version__ = '0.9.3.1.4.1.5.9,2' here = path.abspath(path.dirname(__file__)) From 8b11021c47b12d8b934a158fac040ddc47a84d5b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 12 Aug 2018 22:09:05 -0400 Subject: [PATCH 432/642] cpr temporary breakage --- karmapi/cpr.py | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 5bf97c2..88bc9de 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -473,15 +473,14 @@ async def run(self): How to fill in self.grid? """ - self.t += 1 + await super().run() n1, n2 = self.size width = 2 * math.pi height = math.pi - grid = [] - + ix = 0 for x in range(n1): xx = ((x / n1) + (1 / (2 * n1))) * 2 * math.pi @@ -495,16 +494,12 @@ async def run(self): rc, rphase, rscale = self.waves['r'] gc, gphase, gscale = self.waves['g'] bc, bphase, bscale = self.waves['b'] - - value = ( - sample_wave(rphase, xx) * rscale, - sample_wave(bphase, yy) * bscale, - # scratches head and wonders if xx is ok in next line - sample_wave(gphase, xx) * gscale) - grid.append(value) + self.red[ix] = sample_wave(rphase, xx) * rscale + self.blue[ix] = sample_wave(bphase, yy) * bscale - self.grid2rgb(grid) + # not sure xx is the right thing here + self.green[ix] = sample_wave(gphase, xx) * gscale def randunit(): From 71a31647ce81334017725d1fc3acebdf20ac486c Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 12 Aug 2018 22:43:58 -0400 Subject: [PATCH 433/642] cpr thrashing around --- karmapi/cpr.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 88bc9de..73d035d 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -501,6 +501,8 @@ async def run(self): # not sure xx is the right thing here self.green[ix] = sample_wave(gphase, xx) * gscale + ix += 1 + def randunit(): @@ -701,8 +703,10 @@ async def run(self): def generate_spheres(sizes, clazz=None): clazz = clazz or NeutronStar + xclazz = clazz first = True + sizes = list(sizes) for r, nn in enumerate(sizes): size = nn @@ -721,6 +725,11 @@ def generate_spheres(sizes, clazz=None): clazz = Sphere yield sphere + + # Add an outer sphere too + size = sizes[-1] + size = (size, size) + #yield xclazz(size=size, r=r+1, m=100 * M, mu = M) def prime_balls(base, n): From 7e7eec7fc1394be4874a2f7053b686aa5dc0d1ac Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 13 Aug 2018 10:27:40 -0400 Subject: [PATCH 434/642] more cpr thrashing --- karmapi/cpr.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 73d035d..ddc44e0 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -279,6 +279,8 @@ async def run(self): lbweight = (lb or self).weight(self) nbweight = (nb or self).weight(self) + print('weights', cbweight, lbweight, nbweight) + #print(cbweight, lbweight, nbweight) for x in range(self.size[0]): @@ -315,6 +317,7 @@ def weight(self, ball): delta_r = abs(ball.r - self.r) + if delta_r == 0: return self.M or 1 @@ -331,6 +334,7 @@ def grid2rgb(self, value): self.green[ix] = g self.blue[ix] = b + def quantise(self, value): value = int(127 + (value * 128)) @@ -475,6 +479,10 @@ async def run(self): """ await super().run() + self.red = [x/10 for x in self.red] + self.blue = [x/10 for x in self.blue] + self.green = [x/10 for x in self.green] + n1, n2 = self.size width = 2 * math.pi height = math.pi @@ -495,11 +503,11 @@ async def run(self): gc, gphase, gscale = self.waves['g'] bc, bphase, bscale = self.waves['b'] - self.red[ix] = sample_wave(rphase, xx) * rscale - self.blue[ix] = sample_wave(bphase, yy) * bscale + self.red[ix] += sample_wave(rphase, xx) * rscale + self.blue[ix] += sample_wave(bphase, yy) * bscale # not sure xx is the right thing here - self.green[ix] = sample_wave(gphase, xx) * gscale + self.green[ix] += sample_wave(gphase, xx) * gscale ix += 1 @@ -707,7 +715,7 @@ def generate_spheres(sizes, clazz=None): first = True sizes = list(sizes) - for r, nn in enumerate(sizes): + for r, nn in enumerate(sizes[:-1]): size = nn @@ -729,7 +737,10 @@ def generate_spheres(sizes, clazz=None): # Add an outer sphere too size = sizes[-1] size = (size, size) - #yield xclazz(size=size, r=r+1, m=100 * M, mu = M) + + #M = 10 * M + #mu = M / 10 + yield xclazz(size=size, r=r+1, m=M, mu=mu) def prime_balls(base, n): From f53e4192467616ea685ff4cfdbad997902168df2 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 13 Aug 2018 15:49:41 -0400 Subject: [PATCH 435/642] general confusion and some insights --- karmapi/cpr.py | 10 +++++++--- karmapi/ncdf.py | 3 ++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index ddc44e0..577be8d 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -280,6 +280,7 @@ async def run(self): nbweight = (nb or self).weight(self) print('weights', cbweight, lbweight, nbweight) + #cbweight = lbweight = nbweight = 1 #print(cbweight, lbweight, nbweight) @@ -294,11 +295,14 @@ async def run(self): if lb: lbc = lb.sample(x1, y1, x2, y2) else: - lbc = tuple(randunit() for c in 'rgb') + #lbc = tuple(randunit() for c in 'rgb') + lbc = (127, 127, 127) + if nb: nbc = nb.sample(x1, y1, x2, y2) else: - nbc = tuple(randunit() for c in 'rgb') + #nbc = tuple(randunit() for c in 'rgb') + nbc = (127, 127, 127) cix = (y * self.size[0]) + x cbc = (self.red[cix], self.green[cix], self.blue[cix]) @@ -486,7 +490,6 @@ async def run(self): n1, n2 = self.size width = 2 * math.pi height = math.pi - ix = 0 for x in range(n1): @@ -740,6 +743,7 @@ def generate_spheres(sizes, clazz=None): #M = 10 * M #mu = M / 10 + print(xclazz) yield xclazz(size=size, r=r+1, m=M, mu=mu) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 55136e7..23265e7 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -327,6 +327,7 @@ def __init__(self, parent, stamps=None, values=None, sphere.M = 1 sphere.r = 0 balls[0] = sphere + #del balls[-1] super().__init__(parent, balls=balls, **kwargs) @@ -400,4 +401,4 @@ def __init__(self, parent, stamps=None, values=None, curio.run(farm.run(), with_monitor=True) - + From 71d6e92909646f1936a896fd4214811650203683 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 13 Aug 2018 16:16:16 -0400 Subject: [PATCH 436/642] shorten version number --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 1d4c9ec..93570b2 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from codecs import open from os import path -__version__ = '0.9.3.1.4.1.5.9,2' +__version__ = '1.0' here = path.abspath(path.dirname(__file__)) From 6dfdf427663dcaf88816d1732fc0cd0cc9a02c1c Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 13 Aug 2018 17:33:44 -0400 Subject: [PATCH 437/642] more cpr optiond d and f change metric --- karmapi/cpr.py | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 577be8d..b6776e9 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -317,6 +317,7 @@ async def run(self): self.grid2rgb(grid) #self.normalise() + def weight(self, ball): delta_r = abs(ball.r - self.r) @@ -329,7 +330,7 @@ def weight(self, ball): #print(delta_r, self.M or 1, self.fade, weight) return weight - + def grid2rgb(self, value): @@ -545,7 +546,7 @@ class NestedWaves(pigfarm.Yard): and draw slices on the canvas from the yard. """ - def __init__(self, parent, balls=None): + def __init__(self, parent, balls=None, fade=1): """ Initialise the thing """ super().__init__(parent) @@ -555,6 +556,7 @@ def __init__(self, parent, balls=None): self.views = ['grid', 'northpole', 'southpole', 'uphemi', 'lowhemi'] self.view = 0 + self.fade = fade self.build(balls) self.add_event_map(' ', self.pause) @@ -566,6 +568,19 @@ def __init__(self, parent, balls=None): self.add_event_map('k', self.forward) self.add_event_map('v', self.next_view) self.add_event_map('b', self.previous_view) + self.add_event_map('d', self.lessfade) + self.add_event_map('f', self.morefade) + + + async def lessfade(self): + """ Decrease r exponent """ + self.fade -= 1 + print(f"metric: 1 / (r ** {self.fade})") + + async def morefade(self): + """ Increase r exponent """ + self.fade += 1 + print(f"metric: 1 / (r ** {self.fade})") async def pause(self): """ Pause """ @@ -614,6 +629,7 @@ def build(self, balls): # may need to revisit this, spread some work # self.uq.put(sphere) print('adding ball', sphere.size) + sphere.fade = self.fade self.balls.append(sphere) last_ball = sphere @@ -718,15 +734,19 @@ def generate_spheres(sizes, clazz=None): first = True sizes = list(sizes) + + K = 2 for r, nn in enumerate(sizes[:-1]): size = nn size = (size, size) - M, mu = 1.0, 0.1 + M = 1.0 * K + + mu = M / 10 - R = 1 * r + R = 2 * r #M = M / (R+1) mu = M / 10 @@ -892,6 +912,7 @@ def argument_parser(): help='what to show') parser.add_argument('-a', type=int, default=1) parser.add_argument('-n', type=int, default=10) + parser.add_argument('--fade', type=int, default=1) parser.add_argument('--stride', type=int) parser.add_argument('-m', type=int, default=1) parser.add_argument('--base', type=int, default=20) @@ -932,7 +953,7 @@ def main(): # pass list of balls into NestedWaves spheres = args_to_spheres(args) - farm = pigfarm.sty(NestedWaves, dict(balls=spheres)) + farm = pigfarm.sty(NestedWaves, dict(balls=spheres, fade=args.fade)) curio.run(farm.run(), with_monitor=True) From 6d777f7a097a1b0b721309064a1f03c115c41110 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 14 Aug 2018 15:45:54 -0400 Subject: [PATCH 438/642] juggling too many balls --- karmapi/ncdf.py | 7 ++++++- karmapi/pigfarm.py | 2 +- karmapi/roikpi.py | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 23265e7..34a3a0f 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -327,7 +327,12 @@ def __init__(self, parent, stamps=None, values=None, sphere.M = 1 sphere.r = 0 balls[0] = sphere - #del balls[-1] + + sphere = WorldView(self.stamps, self.values) + sphere.M = balls[-1].M + sphere.r = balls[-1].r + balls[-1] = sphere + super().__init__(parent, balls=balls, **kwargs) diff --git a/karmapi/pigfarm.py b/karmapi/pigfarm.py index 2709507..baf201d 100644 --- a/karmapi/pigfarm.py +++ b/karmapi/pigfarm.py @@ -334,7 +334,7 @@ def __init__(self): self.scale = 400 self.fade = 30 - self.sleep = 1.0 + self.sleep = 0.05 self.napcount = 0 self.naptime = self.sleep self.images = {} diff --git a/karmapi/roikpi.py b/karmapi/roikpi.py index f75b82e..a0c5598 100644 --- a/karmapi/roikpi.py +++ b/karmapi/roikpi.py @@ -63,7 +63,7 @@ def main(): farm.add( cpr.NestedWaves, - dict(balls=balls)) + dict(balls=spheres)) curio.run(farm.run(), with_monitor=True) From 6e834be0d3e4054ce3ea9ebf5de2fa1313c9ca3a Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 16 Aug 2018 14:34:30 -0400 Subject: [PATCH 439/642] make world spin slowly --- karmapi/ncdf.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 34a3a0f..01a3e9f 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -237,6 +237,7 @@ def __init__(self, stamps, values, **kwargs): self.max = self.values[0].max() self.ix = 0 self.n = len(self.stamps) + self.spin = 1 super().__init__(self.size, **kwargs) @@ -261,7 +262,9 @@ def current(self): s, d, ix = self.stamps[self.ix] - return self.values[ix] + data = self.values[ix] + + return data def current_date(self): @@ -271,18 +274,26 @@ def current_date(self): def next_frame(self): - self.red = self.scale(self.current()) + red = self.scale(self.current()) + self.red = red[self.spin:] + red[0:self.spin] self.forward() - self.green = self.scale(self.current()) + green = self.scale(self.current()) + self.green = green[self.spin:] + green[0:self.spin] #self.green = [0. for x in self.red] self.forward() - self.blue = self.scale(self.current()) + blue = self.scale(self.current()) + self.blue = blue[self.spin:] + blue[0:self.spin] + + self.spin += 1 + self.spin %= self.size[0] + #self.blue = [0. for x in self.red] self.forward() + # fix me for skip in range((9 * 11) + 18): self.forward() From 9fb5421d28c06b7bc380c63ea1e854febf76af32 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 18 Aug 2018 14:29:12 -0400 Subject: [PATCH 440/642] play with world spin --- karmapi/ncdf.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 01a3e9f..44fc823 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -286,7 +286,7 @@ def next_frame(self): blue = self.scale(self.current()) self.blue = blue[self.spin:] + blue[0:self.spin] - self.spin += 1 + self.spin += 5 self.spin %= self.size[0] #self.blue = [0. for x in self.red] @@ -332,6 +332,7 @@ def __init__(self, parent, stamps=None, values=None, self.stamps = list(stamps) self.values = values self.save = save + self.spin = 1 sphere = WorldView(self.stamps, self.values) @@ -344,6 +345,8 @@ def __init__(self, parent, stamps=None, values=None, sphere.r = balls[-1].r balls[-1] = sphere + #self.add_event_map('w', self.more_spin) + #self.add_event_map('w', self.less_spin) super().__init__(parent, balls=balls, **kwargs) From bb33933663d1f88bc9bd94927b576bc9ded2b2d9 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 18 Aug 2018 14:47:22 -0400 Subject: [PATCH 441/642] tick toc run for cpr spheres --- karmapi/cpr.py | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index b6776e9..fff6c90 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -246,6 +246,14 @@ def lowhemi(self): return self.poleview(pixels, wind=-1) async def run(self): + """ Run the sphere """ + + while True: + await self.tick() + await curio.sleep(self.sleep) + + + async def tick(self): """ Run a sphere @@ -470,7 +478,8 @@ def reset(self, init=False): super().reset(init) self.setup_wave() - async def run(self): + + async def tick(self): """ wave red, green, blue @@ -482,7 +491,7 @@ async def run(self): How to fill in self.grid? """ - await super().run() + await super().tick() self.red = [x/10 for x in self.red] self.blue = [x/10 for x in self.blue] @@ -514,6 +523,8 @@ async def run(self): self.green[ix] += sample_wave(gphase, xx) * gscale ix += 1 + + #await curio.sleep(0) def randunit(): @@ -522,7 +533,7 @@ def randunit(): if random() > 0.5: x *= -1 - return x + return x / 10 def sample_wave(phase, x): @@ -700,6 +711,15 @@ async def draw_ball(self, ball): yy = int(self.height / 2) self.canvas.create_image(xx, yy, image=phim) + async def start_balls_running(self): + + spheres = [] + for ball in self.balls: + sphere = await curio.spawn(ball.run) + spheres.append(sphere) + + return sphere + async def run(self): """ Run the waves """ @@ -711,7 +731,9 @@ async def run(self): #await self.random_step_some() - await self.backward_step_all() + #await self.backward_step_all() + + spheres = await self.start_balls_running() while True: if self.paused: @@ -722,9 +744,11 @@ async def run(self): await self.draw() #await self.step_balls() - await self.backward_step_all() + #await self.backward_step_all() - await curio.sleep(self.sleep) + await curio.sleep(self.sleep) + + curio.join(spheres) def generate_spheres(sizes, clazz=None): From fd81b47b342ec44155ed090933416011fea873f7 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 18 Aug 2018 14:48:13 -0400 Subject: [PATCH 442/642] bump version for a new release --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 93570b2..79ea71e 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from codecs import open from os import path -__version__ = '1.0' +__version__ = '1.03' here = path.abspath(path.dirname(__file__)) From 32aa5062c2fc09df224e8cd868cf376a48e12fda Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 18 Aug 2018 20:23:00 -0400 Subject: [PATCH 443/642] sleepy ticks for cpr and ncdf --- karmapi/cpr.py | 52 ++++++++++++++++++++++++++++++++++++++++++------- karmapi/ncdf.py | 4 ++-- 2 files changed, 47 insertions(+), 9 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index fff6c90..bcc779e 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -73,7 +73,7 @@ from karmapi import base, tpot, prime, pigfarm -from random import random, randint, gauss +from random import random, randint, gauss, shuffle class Sphere: """ If it hass mass (m) then pass through waves @@ -137,6 +137,15 @@ def reset(self, init=False): return + async def more_sleepy(self): + """ Make the ball sleep more """ + self.sleep *= 2 + + + async def more_wakey(self): + """ Make the ball sleep less """ + self.sleep /= 2 + def random_grid(self): @@ -278,7 +287,7 @@ async def tick(self): n1, n2 = self.size - grid = [] + grid = [0] * n1 * n2 ix = 0 deltax = (1 / (2 * n1)) * 2 * math.pi deltay = (1 / (2 * n2)) * 2 * math.pi @@ -291,12 +300,17 @@ async def tick(self): #cbweight = lbweight = nbweight = 1 #print(cbweight, lbweight, nbweight) - - for x in range(self.size[0]): + + xgrid = list(range(self.size[0])) + ygrid = list(range(self.size[1])) + shuffle(xgrid) + for x in xgrid: + curio.sleep(0) x1 = (x / n1) * 2 * math.pi x2 = x1 + deltax - - for y in range(self.size[1]): + + shuffle(ygrid) + for y in ygrid: y1 = (y / n2) * 2 * math.pi y2 = y1 + deltay @@ -320,7 +334,7 @@ async def tick(self): (cc * nbweight)) * (1 / math.e) for aa, bb, cc in zip(lbc, cbc, nbc)] - grid.append(value) + grid[cix] = value self.grid2rgb(grid) #self.normalise() @@ -581,6 +595,8 @@ def __init__(self, parent, balls=None, fade=1): self.add_event_map('b', self.previous_view) self.add_event_map('d', self.lessfade) self.add_event_map('f', self.morefade) + self.add_event_map('s', self.more_sleepy) + self.add_event_map('w', self.more_wakey) async def lessfade(self): @@ -593,6 +609,28 @@ async def morefade(self): self.fade += 1 print(f"metric: 1 / (r ** {self.fade})") + async def more_sleepy(self): + """ Sleep more + + Tell each ball and self to sleep more + """ + await self.sleepy() + + for ball in self.balls: + await ball.more_sleepy() + + + async def more_wakey(self): + """ Sleep less + + Tell each ball and self to sleep less + """ + await self.wakey() + + for ball in self.balls: + await ball.more_wakey() + + async def pause(self): """ Pause """ self.paused = not self.paused diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 44fc823..adf76c7 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -237,7 +237,7 @@ def __init__(self, stamps, values, **kwargs): self.max = self.values[0].max() self.ix = 0 self.n = len(self.stamps) - self.spin = 1 + self.spin = 5 super().__init__(self.size, **kwargs) @@ -247,7 +247,7 @@ def __init__(self, stamps, values, **kwargs): # take 3 at a time for r g b - async def run(self): + async def tick(self): self.t += 1 From 2df00cdcf9d59b836a12c497f85774ffe38b9104 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 19 Aug 2018 16:10:30 -0400 Subject: [PATCH 444/642] more cpr puzzling --- karmapi/cpr.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index bcc779e..fbad720 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -263,12 +263,9 @@ async def run(self): async def tick(self): - """ Run a sphere + """ Do one tick for the sphere - - Does one tick for the sphere. - - so self.t is also a count of how often we've been here. + so self.t is also a count of how often we've been here ?? at least in this thread. @@ -317,14 +314,16 @@ async def tick(self): if lb: lbc = lb.sample(x1, y1, x2, y2) else: - #lbc = tuple(randunit() for c in 'rgb') - lbc = (127, 127, 127) + lbc = tuple(randunit() for c in 'rgb') + #lbc = (127, 127, 127) + #lbweight = 0 if nb: nbc = nb.sample(x1, y1, x2, y2) else: - #nbc = tuple(randunit() for c in 'rgb') - nbc = (127, 127, 127) + nbc = tuple(randunit() for c in 'rgb') + #nbweight = 0 + #nbc = (127, 127, 127) cix = (y * self.size[0]) + x cbc = (self.red[cix], self.green[cix], self.blue[cix]) From ceab18e869837c6e3e7107665972fbb900b151b6 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 21 Aug 2018 12:12:36 -0400 Subject: [PATCH 445/642] homing in on spiral bugs --- karmapi/cpr.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index fbad720..25ebc7d 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -298,8 +298,8 @@ async def tick(self): #print(cbweight, lbweight, nbweight) - xgrid = list(range(self.size[0])) - ygrid = list(range(self.size[1])) + xgrid = list(range(n2)) + ygrid = list(range(n1)) shuffle(xgrid) for x in xgrid: curio.sleep(0) @@ -325,7 +325,7 @@ async def tick(self): #nbweight = 0 #nbc = (127, 127, 127) - cix = (y * self.size[0]) + x + cix = (y * n1) + x cbc = (self.red[cix], self.green[cix], self.blue[cix]) value = [((aa * lbweight) + From a3b73563b689772a30f1855e0cf881f2fe4a9d57 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 22 Aug 2018 11:34:07 -0400 Subject: [PATCH 446/642] add twist option to cpr --- karmapi/cpr.py | 65 +++++++++++++++++++++++++++++++---------------- karmapi/ncdf.py | 58 +++++++++++++++++++++++++++--------------- karmapi/roikpi.py | 22 ++++++++++++---- 3 files changed, 98 insertions(+), 47 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 25ebc7d..2a1a549 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -86,7 +86,8 @@ class Sphere: """ def __init__(self, size=None, - t=0, m=None, r=None, omega=None, velocity=None, mu=None): + t=0, m=None, r=None, omega=None, velocity=None, mu=None, + twist=True): # resolution size = size or (4, 4) @@ -102,6 +103,8 @@ def __init__(self, size=None, self.last_ball = None self.next_ball = None + self.twist = True + #self.fade = 1 / math.e self.fade = 1 @@ -300,16 +303,19 @@ async def tick(self): xgrid = list(range(n2)) ygrid = list(range(n1)) - shuffle(xgrid) - for x in xgrid: + + shuffle(ygrid) + for y in ygrid: curio.sleep(0) - x1 = (x / n1) * 2 * math.pi - x2 = x1 + deltax + y1 = (y / n2) * 2 * math.pi + y2 = y1 + deltay - shuffle(ygrid) - for y in ygrid: - y1 = (y / n2) * 2 * math.pi - y2 = y1 + deltay + shuffle(xgrid) + for x in xgrid: + #curio.sleep(0) + + x1 = (x / n1) * 2 * math.pi + x2 = x1 + deltax if lb: lbc = lb.sample(x1, y1, x2, y2) @@ -325,7 +331,12 @@ async def tick(self): #nbweight = 0 #nbc = (127, 127, 127) - cix = (y * n1) + x + + tix = cix = (y * n1) + x + + if n1 == n2 and self.twist: + tix = (x * n1) + y + cbc = (self.red[cix], self.green[cix], self.blue[cix]) value = [((aa * lbweight) + @@ -333,7 +344,10 @@ async def tick(self): (cc * nbweight)) * (1 / math.e) for aa, bb, cc in zip(lbc, cbc, nbc)] - grid[cix] = value + + grid[tix] = value + + self.grid2rgb(grid) #self.normalise() @@ -570,7 +584,7 @@ class NestedWaves(pigfarm.Yard): and draw slices on the canvas from the yard. """ - def __init__(self, parent, balls=None, fade=1): + def __init__(self, parent, balls=None, fade=1, twist=True): """ Initialise the thing """ super().__init__(parent) @@ -581,6 +595,7 @@ def __init__(self, parent, balls=None, fade=1): self.views = ['grid', 'northpole', 'southpole', 'uphemi', 'lowhemi'] self.view = 0 self.fade = fade + self.twist = twist self.build(balls) self.add_event_map(' ', self.pause) @@ -596,6 +611,7 @@ def __init__(self, parent, balls=None, fade=1): self.add_event_map('f', self.morefade) self.add_event_map('s', self.more_sleepy) self.add_event_map('w', self.more_wakey) + self.add_event_map('t', self.toggle_twist) async def lessfade(self): @@ -629,6 +645,16 @@ async def more_wakey(self): for ball in self.balls: await ball.more_wakey() + async def toggle_twist(self): + """ Toggle 90 degree twist + + Tell each ball to toggle twist + """ + self.twist = not self.twist + + for ball in self.balls: + ball.twist = self.twist + async def pause(self): """ Pause """ @@ -960,19 +986,13 @@ async def run(self): """ ??? """ -def argument_parser(): +def argument_parser(parser=None): - parser = argparse.ArgumentParser() + parser = parser or argparse.ArgumentParser() - parser.add_argument('--gallery', nargs='*', default=['.', '../gallery']) - parser.add_argument( - '--snowy', action='store_true', - help='random cat pictures') - parser.add_argument( - '--name', default='tree', - help='what to show') parser.add_argument('-a', type=int, default=1) parser.add_argument('-n', type=int, default=10) + parser.add_argument('--twist', type=bool, default=True) parser.add_argument('--fade', type=int, default=1) parser.add_argument('--stride', type=int) parser.add_argument('-m', type=int, default=1) @@ -1014,7 +1034,8 @@ def main(): # pass list of balls into NestedWaves spheres = args_to_spheres(args) - farm = pigfarm.sty(NestedWaves, dict(balls=spheres, fade=args.fade)) + farm = pigfarm.sty(NestedWaves, dict(balls=spheres, fade=args.fade, + twist=args.twist)) curio.run(farm.run(), with_monitor=True) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index adf76c7..53363ba 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -1,5 +1,13 @@ """ -Interface to netcdf files +View netcdf files of global data + +Fit models + +Simulate future + +n c d f + +natural circular data field? """ import datetime import math @@ -351,17 +359,12 @@ def __init__(self, parent, stamps=None, values=None, super().__init__(parent, balls=balls, **kwargs) +def argument_parser(parser=None): - -if __name__ == '__main__': - - - parser = cpr.argument_parser() - + parser = cpr.argument_parser(parser) parser.add_argument('--path', default='karmapi/ecmwf') parser.add_argument('--value', default='t2m') parser.add_argument('--raw', default='temperature.nc') - parser.add_argument('--date') parser.add_argument( '--pc', action='store_true', help='do principal components') @@ -371,22 +374,34 @@ def __init__(self, parent, stamps=None, values=None, parser.add_argument('--offset', type=int, default=0) parser.add_argument('--save') - args = parser.parse_args() + return parser - path = Path.home() / Path(args.path) +class CircularField: - df = load(path / args.raw) + def __init__(self, args): + """ Load the file """ - stamps = df.variables['time'] - values = df.variables[args.value] + path = Path.home() / Path(args.path) - print(df.variables) - - stamps = stamp_sort(stamps) + self.df = load(path / args.raw) - print("number of observations:", len(stamps)) + stamps = self.df.variables['time'] + self.values = self.df.variables[args.value] + + print(self.df.variables) + + self.stamps = stamp_sort(stamps) + + print("number of observations:", len(stamps)) + + +if __name__ == '__main__': + + + parser = argument_parser() + + args = parser.parse_args() - path = path / args.value if args.pc: pca = pcs(stamps, values, 48*35) @@ -404,15 +419,18 @@ def __init__(self, parent, stamps=None, values=None, model(stamps, values) else: + #path = path / args.value #images(path, stamps, values) pass + cf = CircularField(args) + print('min max:') - print(values[0].min(), values[0].max()) + print(cf.values[0].min(), cf.values[0].max()) spheres = cpr.args_to_spheres(args) - parms = dict(stamps=stamps, values=values, save=args.save, + parms = dict(stamps=cf.stamps, values=cf.values, save=args.save, balls=spheres) farm = pigfarm.sty(World, parms) diff --git a/karmapi/roikpi.py b/karmapi/roikpi.py index a0c5598..a7c5102 100644 --- a/karmapi/roikpi.py +++ b/karmapi/roikpi.py @@ -25,18 +25,19 @@ def main(): - parser = cpr.argument_parser() - + parser = ncdf.argument_parser() + parser.add_argument('--pig', action='store_false', default=True) parser.add_argument('--minutes', type=int, default=30) - parser.add_argument('path', nargs='?', default='.') + parser.add_argument('slides', nargs='?', default='.') parser.add_argument('--background') parser.add_argument('--version', default='') parser.add_argument('--date') parser.add_argument('--events') args = parser.parse_args() - + print(args) + args.date = base.parse_date(args.date) if args.events: @@ -47,7 +48,7 @@ def main(): farm.add( tankrain.TankRain, - dict(path=args.path, version=args.version, date=args.date)) + dict(path=args.slides, version=args.version, date=args.date)) # JeusSansFrontieres jsf = wc.jsf @@ -65,6 +66,17 @@ def main(): cpr.NestedWaves, dict(balls=spheres)) + cf = ncdf.CircularField(args) + print('min max:') + print(cf.values[0].min(), cf.values[0].max()) + + spheres = cpr.args_to_spheres(args) + + parms = dict(stamps=cf.stamps, values=cf.values, save=args.save, + balls=spheres) + + farm.add(ncdf.World, parms) + curio.run(farm.run(), with_monitor=True) From 5b1534f0e21ea4505048c9cb54f145f782fe972a Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 22 Aug 2018 12:55:30 -0400 Subject: [PATCH 447/642] set all cpr sphere weights to one --- karmapi/cpr.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 2a1a549..7aeb95f 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -296,7 +296,6 @@ async def tick(self): lbweight = (lb or self).weight(self) nbweight = (nb or self).weight(self) - print('weights', cbweight, lbweight, nbweight) #cbweight = lbweight = nbweight = 1 #print(cbweight, lbweight, nbweight) @@ -304,6 +303,9 @@ async def tick(self): xgrid = list(range(n2)) ygrid = list(range(n1)) + cbweight = lbweight = nbweight = 1 + print('weights', cbweight, lbweight, nbweight) + shuffle(ygrid) for y in ygrid: curio.sleep(0) From d3ef2be4e315dbcce5fe720996baee81a3b6d372 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 22 Aug 2018 12:56:21 -0400 Subject: [PATCH 448/642] bump version number --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 79ea71e..c22073b 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from codecs import open from os import path -__version__ = '1.03' +__version__ = '1.031' here = path.abspath(path.dirname(__file__)) From b476e6df587e7dd880cab19ab9c733bed1ab8576 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 22 Aug 2018 13:29:37 -0400 Subject: [PATCH 449/642] remove debug divide by 10 cpr --- karmapi/cpr.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 7aeb95f..f657ecc 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -522,9 +522,9 @@ async def tick(self): """ await super().tick() - self.red = [x/10 for x in self.red] - self.blue = [x/10 for x in self.blue] - self.green = [x/10 for x in self.green] + #self.red = [x/10 for x in self.red] + #self.blue = [x/10 for x in self.blue] + #self.green = [x/10 for x in self.green] n1, n2 = self.size width = 2 * math.pi From 96d3f89d8305fdda55c0eaca5739c0a8def8f4a5 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 22 Aug 2018 13:30:16 -0400 Subject: [PATCH 450/642] round and round with versions --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index c22073b..747fe26 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from codecs import open from os import path -__version__ = '1.031' +__version__ = '1.0314' here = path.abspath(path.dirname(__file__)) From 526c2c29faa67468d6f446455c21c1b279349922 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 23 Aug 2018 12:04:47 -0400 Subject: [PATCH 451/642] mass option for cpr --- karmapi/cpr.py | 51 ++++++++++++++++++++++++++++------------------ karmapi/pigfarm.py | 1 - 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index f657ecc..78d0c9b 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -303,12 +303,12 @@ async def tick(self): xgrid = list(range(n2)) ygrid = list(range(n1)) - cbweight = lbweight = nbweight = 1 + #cbweight = lbweight = nbweight = 1 print('weights', cbweight, lbweight, nbweight) shuffle(ygrid) for y in ygrid: - curio.sleep(0) + #curio.sleep(0) y1 = (y / n2) * 2 * math.pi y2 = y1 + deltay @@ -535,7 +535,7 @@ async def tick(self): xx = ((x / n1) + (1 / (2 * n1))) * 2 * math.pi xx += self.inc * self.t - + for y in range(n2): yy = (y / n2) + (1 / (2 * n2)) * 2 * math.pi @@ -783,7 +783,7 @@ async def start_balls_running(self): sphere = await curio.spawn(ball.run) spheres.append(sphere) - return sphere + return spheres async def run(self): @@ -799,24 +799,29 @@ async def run(self): #await self.backward_step_all() spheres = await self.start_balls_running() - + while True: - if self.paused: - await curio.sleep(self.sleep) - continue + try: + if self.paused: + await curio.sleep(self.sleep) + continue - self.canvas.delete('all') + self.canvas.delete('all') - await self.draw() - #await self.step_balls() - #await self.backward_step_all() + await self.draw() + #await self.step_balls() + #await self.backward_step_all() - await curio.sleep(self.sleep) + await curio.sleep(self.sleep) + + except curio.CancelledError: + for ball in spheres: + ball.cancel() curio.join(spheres) -def generate_spheres(sizes, clazz=None): +def generate_spheres(sizes, clazz=None, mass=None): clazz = clazz or NeutronStar xclazz = clazz @@ -824,22 +829,27 @@ def generate_spheres(sizes, clazz=None): first = True sizes = list(sizes) + mass = mass or [1] + while len(mass) < len(sizes): + mass.append(mass[-1]) + K = 2 - for r, nn in enumerate(sizes[:-1]): + for r, (nn, M) in enumerate(zip(sizes[:-1], mass)): size = nn size = (size, size) - M = 1.0 * K + #M = 1.0 * K - mu = M / 10 + #mu = M / 10 R = 2 * r #M = M / (R+1) - mu = M / 10 + #mu = M / 10 + mu = None sphere = clazz(size, r=R, m=M, mu=mu) clazz = Sphere @@ -999,6 +1009,7 @@ def argument_parser(parser=None): parser.add_argument('--stride', type=int) parser.add_argument('-m', type=int, default=1) parser.add_argument('--base', type=int, default=20) + parser.add_argument('--mass', type=int,nargs='?', default=[]) return parser @@ -1022,11 +1033,11 @@ def args_to_spheres(args): balls = prime_balls(args.base, args.n) print('balls', balls) - spheres = list(generate_spheres(balls)) + spheres = list(generate_spheres(balls, mass=args.mass)) return spheres - + def main(): parser = argument_parser() diff --git a/karmapi/pigfarm.py b/karmapi/pigfarm.py index baf201d..2610891 100644 --- a/karmapi/pigfarm.py +++ b/karmapi/pigfarm.py @@ -28,7 +28,6 @@ from karmapi import piglet from karmapi import toy -from tkinter import Toplevel BIGLY_FONT = 'helvetica 20 bold' From 53e941534da3bbf9949ad451e98cd1a8773b4795 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 23 Aug 2018 13:12:49 -0400 Subject: [PATCH 452/642] misc mass fixes --- karmapi/cpr.py | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 78d0c9b..8c9e27f 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -92,9 +92,11 @@ def __init__(self, size=None, # resolution size = size or (4, 4) - self.red = [] - self.green = [] - self.blue = [] + nn = size[0] * size[1] + + self.red = [0] * nn + self.green = [0] * nn + self.blue = [0] * nn self.size = size self.history = None @@ -132,10 +134,6 @@ def __init__(self, size=None, def reset(self, init=False): """ Reset the sphere """ - self.red.clear() - self.green.clear() - self.blue.clear() - self.random_grid() return @@ -152,11 +150,11 @@ async def more_wakey(self): def random_grid(self): - size = self.size - for pt in range(size[0] * size[1]): - self.red.append(randunit()) - self.green.append(randunit()) - self.blue.append(randunit()) + width, height = self.size + for ix, pt in enumerate(range(width * height)): + self.red[ix] = randunit() + self.green[ix] = randunit() + self.blue[ix] = randunit() def project(self, view=None): @@ -520,8 +518,6 @@ async def tick(self): How to fill in self.grid? """ - await super().tick() - #self.red = [x/10 for x in self.red] #self.blue = [x/10 for x in self.blue] #self.green = [x/10 for x in self.green] @@ -553,7 +549,9 @@ async def tick(self): ix += 1 - #await curio.sleep(0) + #await super().tick() + + #await curio.sleep(0) def randunit(): @@ -1009,7 +1007,7 @@ def argument_parser(parser=None): parser.add_argument('--stride', type=int) parser.add_argument('-m', type=int, default=1) parser.add_argument('--base', type=int, default=20) - parser.add_argument('--mass', type=int,nargs='?', default=[]) + parser.add_argument('--mass', nargs='*', type=float) return parser From 0a18330e32059a129d9d0cb5273d72f7842ff244 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 23 Aug 2018 17:39:34 -0400 Subject: [PATCH 453/642] cpr now has radii option --- karmapi/cpr.py | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 8c9e27f..8325f55 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -130,6 +130,9 @@ def __init__(self, size=None, self.reset(init=True) + def __repr__(self): + """ Show mass size and radius """ + return f'Ball: r = {self.r} M = {self.M} size = {self.size}' def reset(self, init=False): """ Reset the sphere """ @@ -302,7 +305,7 @@ async def tick(self): ygrid = list(range(n1)) #cbweight = lbweight = nbweight = 1 - print('weights', cbweight, lbweight, nbweight) + print(self, 'weights', cbweight, lbweight, nbweight) shuffle(ygrid) for y in ygrid: @@ -541,15 +544,15 @@ async def tick(self): gc, gphase, gscale = self.waves['g'] bc, bphase, bscale = self.waves['b'] - self.red[ix] += sample_wave(rphase, xx) * rscale - self.blue[ix] += sample_wave(bphase, yy) * bscale + self.red[ix] = sample_wave(rphase, xx) * rscale + self.blue[ix] = sample_wave(bphase, yy) * bscale # not sure xx is the right thing here - self.green[ix] += sample_wave(gphase, xx) * gscale + self.green[ix] = sample_wave(gphase, xx) * gscale ix += 1 - #await super().tick() + await super().tick() #await curio.sleep(0) @@ -819,20 +822,27 @@ async def run(self): curio.join(spheres) -def generate_spheres(sizes, clazz=None, mass=None): +def generate_spheres(sizes, clazz=None, mass=None, radii=None): clazz = clazz or NeutronStar xclazz = clazz first = True sizes = list(sizes) + n = len(sizes) mass = mass or [1] - while len(mass) < len(sizes): + while len(mass) < n: mass.append(mass[-1]) + radii = radii or range(n) + + dr = radii[-1] - radii[-2] + while len(radii) < n: + radii.append(radii[-1] + dr) + K = 2 - for r, (nn, M) in enumerate(zip(sizes[:-1], mass)): + for r, nn, M in zip(radii, sizes[:-1], mass): size = nn @@ -842,7 +852,7 @@ def generate_spheres(sizes, clazz=None, mass=None): #mu = M / 10 - R = 2 * r + R = 1 * r #M = M / (R+1) #mu = M / 10 @@ -1008,6 +1018,7 @@ def argument_parser(parser=None): parser.add_argument('-m', type=int, default=1) parser.add_argument('--base', type=int, default=20) parser.add_argument('--mass', nargs='*', type=float) + parser.add_argument('--radii', nargs='*', type=float) return parser @@ -1031,7 +1042,10 @@ def args_to_spheres(args): balls = prime_balls(args.base, args.n) print('balls', balls) - spheres = list(generate_spheres(balls, mass=args.mass)) + spheres = list(generate_spheres( + balls, + mass=args.mass, + radii=args.radii)) return spheres From 880d7ec4c8fca8c3b9dadddde48aca9195b8a8d2 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 23 Aug 2018 17:40:01 -0400 Subject: [PATCH 454/642] bump version number --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 747fe26..3cb236a 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from codecs import open from os import path -__version__ = '1.0314' +__version__ = '1.03141' here = path.abspath(path.dirname(__file__)) From f603afe57120f3bf30e369c5ca8662bdde02ff23 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 24 Aug 2018 14:32:50 -0400 Subject: [PATCH 455/642] outer wave optional and quantise fix? --- karmapi/cpr.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 8325f55..820e692 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -305,7 +305,7 @@ async def tick(self): ygrid = list(range(n1)) #cbweight = lbweight = nbweight = 1 - print(self, 'weights', cbweight, lbweight, nbweight) + print(self, 'weights', lbweight, cbweight, nbweight) shuffle(ygrid) for y in ygrid: @@ -380,6 +380,8 @@ def grid2rgb(self, value): def quantise(self, value): + value = value - int(value) + value = int(127 + (value * 128)) value = int(value % 256) @@ -552,7 +554,7 @@ async def tick(self): ix += 1 - await super().tick() + #await super().tick() #await curio.sleep(0) @@ -822,7 +824,8 @@ async def run(self): curio.join(spheres) -def generate_spheres(sizes, clazz=None, mass=None, radii=None): +def generate_spheres(sizes, clazz=None, mass=None, radii=None, + outer=True): clazz = clazz or NeutronStar xclazz = clazz @@ -871,7 +874,8 @@ def generate_spheres(sizes, clazz=None, mass=None, radii=None): #M = 10 * M #mu = M / 10 print(xclazz) - yield xclazz(size=size, r=r+1, m=M, mu=mu) + if outer: + yield xclazz(size=size, r=r+1, m=M, mu=mu) def prime_balls(base, n): @@ -1019,6 +1023,7 @@ def argument_parser(parser=None): parser.add_argument('--base', type=int, default=20) parser.add_argument('--mass', nargs='*', type=float) parser.add_argument('--radii', nargs='*', type=float) + parser.add_argument('--noouter', action='store_false') return parser @@ -1045,7 +1050,8 @@ def args_to_spheres(args): spheres = list(generate_spheres( balls, mass=args.mass, - radii=args.radii)) + radii=args.radii, + outer=args.noouter)) return spheres From f3af791c16d527069524a89ea50a00746c5ec035 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 28 Aug 2018 14:50:11 -0400 Subject: [PATCH 456/642] adventures in async land threas and GIL --- karmapi/cpr.py | 51 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 820e692..eb98b71 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -67,7 +67,7 @@ import curio -import numpy +import numpy as np from PIL import Image, ImageTk @@ -94,9 +94,9 @@ def __init__(self, size=None, nn = size[0] * size[1] - self.red = [0] * nn - self.green = [0] * nn - self.blue = [0] * nn + self.red = np.zeros(nn) + self.green = np.zeros(nn) + self.blue = np.zeros(nn) self.size = size self.history = None @@ -126,7 +126,8 @@ def __init__(self, size=None, # time moves slower in the inner spheres? # FIXME? - self.sleep = 1 / self.size[0] + #self.sleep = 1 / self.size[0] + self.sleep=1 self.reset(init=True) @@ -154,10 +155,16 @@ async def more_wakey(self): def random_grid(self): width, height = self.size - for ix, pt in enumerate(range(width * height)): - self.red[ix] = randunit() - self.green[ix] = randunit() - self.blue[ix] = randunit() + nn = width * height + + self.red = np.random.random(nn) + self.green = np.random.random(nn) + self.blue = np.random.random(nn) + + #for ix, pt in enumerate(range(width * height)): + # self.red[ix] = randunit() + # self.green[ix] = randunit() + # self.blue[ix] = randunit() def project(self, view=None): @@ -262,11 +269,14 @@ async def run(self): """ Run the sphere """ while True: - await self.tick() + tick = await curio.spawn_thread(self.tick) + print(f'{self} sleep:{self.sleep}') + ball = await tick.join() + print('joined', ball, self.sleep) await curio.sleep(self.sleep) - async def tick(self): + def tick(self): """ Do one tick for the sphere so self.t is also a count of how often we've been here ?? @@ -355,6 +365,8 @@ async def tick(self): self.grid2rgb(grid) #self.normalise() + return self + def weight(self, ball): @@ -484,7 +496,6 @@ def sample(self, x1, y1, x2, y2): return self.red[ix], self.green[ix], self.blue[ix] - class NeutronStar(Sphere): """ @@ -511,7 +522,7 @@ def reset(self, init=False): self.setup_wave() - async def tick(self): + def tick(self): """ wave red, green, blue @@ -554,7 +565,7 @@ async def tick(self): ix += 1 - #await super().tick() + super().tick() #await curio.sleep(0) @@ -565,7 +576,7 @@ def randunit(): if random() > 0.5: x *= -1 - return x / 10 + return x def sample_wave(phase, x): @@ -803,6 +814,7 @@ async def run(self): spheres = await self.start_balls_running() + print('NESTED WAVES RUNNING') while True: try: if self.paused: @@ -812,6 +824,7 @@ async def run(self): self.canvas.delete('all') await self.draw() + print('ball drawn') #await self.step_balls() #await self.backward_step_all() @@ -1054,7 +1067,8 @@ def args_to_spheres(args): outer=args.noouter)) return spheres - + + def main(): @@ -1068,8 +1082,9 @@ def main(): farm = pigfarm.sty(NestedWaves, dict(balls=spheres, fade=args.fade, twist=args.twist)) - curio.run(farm.run(), with_monitor=True) - + curio.run(farm.run, with_monitor=True) + + if __name__ == '__main__': From 8672d9a19dcf44347dcf48c500647f15ffc35229 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 28 Aug 2018 19:23:22 -0400 Subject: [PATCH 457/642] feedback from the user base --- karmapi/cpr.py | 82 ++++++++++++++++++++++++++++++++++++++++------ karmapi/pigfarm.py | 2 +- 2 files changed, 73 insertions(+), 11 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index eb98b71..1dbe7ee 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -58,6 +58,60 @@ Regardless, another view of these grids is to view them from the north or south pole. When you do that there are spirals everywhere. +Feedback from the user base +=========================== + +:: + + The problem with all these new settings is that my computer can't manage + with a high enough base setting to get reasonably smooth output. + Eventually it all seizes up! You either need to run on a much faster + machine or simplify the code. The previous code before all these later + releases was much better in this respect. I could set base to 137 and get + a fairly responsive output. + + But it's all very interesting. + + You still haven' t told me what it has to do with the new paradigm! (Apart + from the 1/r decay). C + + +The performance has been bugging me too. + +I made some changes in how the spheres update and now they are busy hogging the +cpu. I'm working towards spreading the work across processors. + +Ironically, there's a python thing called the GIL in the way -- but that is +another story. [YOSSER] + +Re: the paradigm. Up to now I have pretty much been debugging the code. + +Puzzling over why the images were like they were, fixing up the code along the +way. + +Once I have the code stable again (?) the next phase is to embed these spheres +in a *celestial sphere*, summing the fields per de Sciama. + +Again, to begin with I will ignore all the physics and code something up that +we can then add some reality (?) to it once I have it working. + +I expect the paradigm to be more evident in this part of the code. + +Another thing to keep in mind it is easy to add new types of spheres: a quasar +with an accretion belt for example. + +I am also hoping there will be some *emergent* behaviour in the code, maybe +even galaxies spawning new ones. + +Johnny GILl 2018/8/28 + +YOSSER +====== + +So for now I am running each tick of a sphere by having curio spawn a thread. + +Let's change that to run in process. + """ import math @@ -126,8 +180,9 @@ def __init__(self, size=None, # time moves slower in the inner spheres? # FIXME? - #self.sleep = 1 / self.size[0] - self.sleep=1 + #self.sleep = self.size[0] / 1000 + self.sleep = self.size[0] / 100 + #self.sleep=.01 self.reset(init=True) @@ -157,9 +212,9 @@ def random_grid(self): width, height = self.size nn = width * height - self.red = np.random.random(nn) - self.green = np.random.random(nn) - self.blue = np.random.random(nn) + self.red = np.random.random(nn) / 10 + self.green = np.random.random(nn) / 10 + self.blue = np.random.random(nn) / 10 #for ix, pt in enumerate(range(width * height)): # self.red[ix] = randunit() @@ -269,9 +324,14 @@ async def run(self): """ Run the sphere """ while True: - tick = await curio.spawn_thread(self.tick) + ball = await curio.run_in_process(self.tick) print(f'{self} sleep:{self.sleep}') - ball = await tick.join() + print('ID', id(ball), id(self)) + + # GOTCHA??? + self.__dict__.update(ball.__dict__) + + #ball = await tick.join() print('joined', ball, self.sleep) await curio.sleep(self.sleep) @@ -565,7 +625,7 @@ def tick(self): ix += 1 - super().tick() + return super().tick() #await curio.sleep(0) @@ -831,10 +891,12 @@ async def run(self): await curio.sleep(self.sleep) except curio.CancelledError: + print('cancelling balls from nested waves') for ball in spheres: - ball.cancel() + print('cancelling', ball) + await ball.cancel() - curio.join(spheres) + raise def generate_spheres(sizes, clazz=None, mass=None, radii=None, diff --git a/karmapi/pigfarm.py b/karmapi/pigfarm.py index 2610891..819509f 100644 --- a/karmapi/pigfarm.py +++ b/karmapi/pigfarm.py @@ -292,7 +292,7 @@ async def show_eric(self): await spawn(farm.run()) - farm.toplevel().withdraw() + #farm.toplevel().withdraw() def sty(clazz=None, parms={}): From d3376ef6f39bfce422616d1b34a102197caf06d1 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 29 Aug 2018 13:18:17 -0400 Subject: [PATCH 458/642] thrashing around in the cpr dark --- karmapi/cpr.py | 48 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 1dbe7ee..2f69ed6 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -182,7 +182,7 @@ def __init__(self, size=None, # FIXME? #self.sleep = self.size[0] / 1000 self.sleep = self.size[0] / 100 - #self.sleep=.01 + self.sleep=.01 self.reset(init=True) @@ -321,7 +321,27 @@ def lowhemi(self): return self.poleview(pixels, wind=-1) async def run(self): - """ Run the sphere """ + """Run the sphere + + Really want to just add to queue and let something else + do the running. + + We already have yosser so maybe should ask to help? + + Want yosser to pop off the queue, run it, push back on at other + end of queue? + + what to do about last and next ball. + + don't really want them to update + + how about ball locks? + + will there be dead locks? + + should something else supervise when balls run? + + """ while True: ball = await curio.run_in_process(self.tick) @@ -334,6 +354,18 @@ async def run(self): #ball = await tick.join() print('joined', ball, self.sleep) await curio.sleep(self.sleep) + + async def magic_tick(self): + """ Run a tick in another process """ + + ball = await curio.run_in_process(self.tick) + print('ID', id(ball), id(self), self.t) + print(self.last_ball, self.next_ball) + + # GOTCHA should may be look before I leap??? + self.__dict__.update(ball.__dict__) + print('ID', id(ball), id(self), self.t) + print(self.last_ball, self.next_ball) def tick(self): @@ -636,7 +668,7 @@ def randunit(): if random() > 0.5: x *= -1 - return x + return x / 10 def sample_wave(phase, x): @@ -802,7 +834,7 @@ async def backward_step_all(self): while balls: ix = randint(0, len(balls)-1) - await balls[ix].run() + await balls[ix].magic_tick() del balls[ix] @@ -856,6 +888,7 @@ async def start_balls_running(self): for ball in self.balls: sphere = await curio.spawn(ball.run) spheres.append(sphere) + curio.sleep(ball.sleep) return spheres @@ -870,9 +903,10 @@ async def run(self): #await self.random_step_some() - #await self.backward_step_all() + await self.backward_step_all() - spheres = await self.start_balls_running() + #spheres = await self.start_balls_running() + spheres = [] print('NESTED WAVES RUNNING') while True: @@ -886,7 +920,7 @@ async def run(self): await self.draw() print('ball drawn') #await self.step_balls() - #await self.backward_step_all() + await self.backward_step_all() await curio.sleep(self.sleep) From 6a9d1a7e3a9c67091318a84d749337d52b081540 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 31 Aug 2018 22:07:56 -0400 Subject: [PATCH 459/642] balls running in separate processes --- docs/cpr.rst | 4 +++ karmapi/cpr.py | 80 +++++++++++++++++++++++++++++++++----------------- 2 files changed, 57 insertions(+), 27 deletions(-) diff --git a/docs/cpr.rst b/docs/cpr.rst index c141ae9..47ebbcb 100644 --- a/docs/cpr.rst +++ b/docs/cpr.rst @@ -4,6 +4,10 @@ *A new paradigm on the universe.* +https://msp.warwick.ac.uk/~cpr/paradigm + +ISBN: 9781973129868 + Or CPU central processsor unit? CP R s t U diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 2f69ed6..353a43d 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -112,6 +112,33 @@ Let's change that to run in process. +So what does it have to do with the Colin Rourke's new paradigm? +================================================================ + +*A new paradigm on the universe.* + +https://msp.warwick.ac.uk/~cpr/paradigm + +ISBN: 9781973129868 + +I am currently reworking my way through the first five chapters of the book. + +It is the third or fourth time through, each time with new understanding. + +It is a wonderful work, with compelling arguments. + +Chapter 2, Sciama's principle finishes with: + + Sciama's initiative, to base a dynamical theory on Mach's principle as + formulated i Sciama's principle, has never been followed up and this + approach to dynamics remains dormant. One of the aims of this book is to + reawaken this approach. + +One of the aims of karma pi is to help understanding of such theories. + +In particular, help my own understanding with computer simulations. + + """ import math @@ -212,15 +239,10 @@ def random_grid(self): width, height = self.size nn = width * height - self.red = np.random.random(nn) / 10 - self.green = np.random.random(nn) / 10 - self.blue = np.random.random(nn) / 10 + self.red = (np.random.random(nn) - 0.5) * 2 + self.green = (np.random.random(nn) - 0.5) * 2 + self.blue = (np.random.random(nn) - 0.5) * 2 - #for ix, pt in enumerate(range(width * height)): - # self.red[ix] = randunit() - # self.green[ix] = randunit() - # self.blue[ix] = randunit() - def project(self, view=None): """ Turn into a PIL? """ @@ -348,8 +370,7 @@ async def run(self): print(f'{self} sleep:{self.sleep}') print('ID', id(ball), id(self)) - # GOTCHA??? - self.__dict__.update(ball.__dict__) + self.update(ball) #ball = await tick.join() print('joined', ball, self.sleep) @@ -359,13 +380,19 @@ async def magic_tick(self): """ Run a tick in another process """ ball = await curio.run_in_process(self.tick) - print('ID', id(ball), id(self), self.t) - print(self.last_ball, self.next_ball) + #print('ID', id(ball), id(self), self.t) + print(ball, self.last_ball, self.next_ball) # GOTCHA should may be look before I leap??? - self.__dict__.update(ball.__dict__) - print('ID', id(ball), id(self), self.t) - print(self.last_ball, self.next_ball) + #self.__dict__.update(ball.__dict__) + self.update(ball) + + def update(self, ball): + + self.red = ball.red + self.blue = ball.blue + self.green = ball.green + self.t = ball.t def tick(self): @@ -444,6 +471,8 @@ def tick(self): cbc = (self.red[cix], self.green[cix], self.blue[cix]) + #print(lbc, cbc, nbc) + value = [((aa * lbweight) + (bb * cbweight) + (cc * nbweight)) * (1 / math.e) @@ -656,10 +685,9 @@ def tick(self): self.green[ix] = sample_wave(gphase, xx) * gscale ix += 1 - - return super().tick() - #await curio.sleep(0) + # return super().tick() + return self def randunit(): @@ -668,7 +696,7 @@ def randunit(): if random() > 0.5: x *= -1 - return x / 10 + return x def sample_wave(phase, x): @@ -832,9 +860,12 @@ async def backward_step_all(self): """ Step all balls once """ balls = self.balls[::-1] while balls: - ix = randint(0, len(balls)-1) + #ix = randint(0, len(balls)-1) + ix = -1 - await balls[ix].magic_tick() + print('Stepping:', balls[ix]) + #await balls[ix].magic_tick() + balls[ix].tick() del balls[ix] @@ -903,10 +934,7 @@ async def run(self): #await self.random_step_some() - await self.backward_step_all() - - #spheres = await self.start_balls_running() - spheres = [] + spheres = await self.start_balls_running() print('NESTED WAVES RUNNING') while True: @@ -920,8 +948,6 @@ async def run(self): await self.draw() print('ball drawn') #await self.step_balls() - await self.backward_step_all() - await curio.sleep(self.sleep) except curio.CancelledError: From 8447792355f8feb82915da3cee5196641396b728 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 1 Sep 2018 20:04:57 -0400 Subject: [PATCH 460/642] boundary conditions smooth running a sink balls --- karmapi/cpr.py | 60 ++++++++++++++++++++++++++++++++------------------ setup.py | 2 +- 2 files changed, 40 insertions(+), 22 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 353a43d..1890fde 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -168,7 +168,7 @@ class Sphere: def __init__(self, size=None, t=0, m=None, r=None, omega=None, velocity=None, mu=None, - twist=True): + twist=True, boundary=None): # resolution size = size or (4, 4) @@ -186,6 +186,8 @@ def __init__(self, size=None, self.last_ball = None self.next_ball = None + self.boundary = boundary or 'zero' + self.twist = True #self.fade = 1 / math.e @@ -436,6 +438,8 @@ def tick(self): #cbweight = lbweight = nbweight = 1 print(self, 'weights', lbweight, cbweight, nbweight) + nbc = lbc = (0., 0., 0.) + shuffle(ygrid) for y in ygrid: #curio.sleep(0) @@ -452,17 +456,14 @@ def tick(self): if lb: lbc = lb.sample(x1, y1, x2, y2) else: - lbc = tuple(randunit() for c in 'rgb') - #lbc = (127, 127, 127) - #lbweight = 0 + if self.boundary == 'random': + lbc = tuple(randunit() for c in 'rgb') if nb: nbc = nb.sample(x1, y1, x2, y2) else: - nbc = tuple(randunit() for c in 'rgb') - #nbweight = 0 - #nbc = (127, 127, 127) - + if self.boundary == 'random': + nbc = tuple(randunit() for c in 'rgb') tix = cix = (y * n1) + x @@ -655,10 +656,6 @@ def tick(self): How to fill in self.grid? """ - #self.red = [x/10 for x in self.red] - #self.blue = [x/10 for x in self.blue] - #self.green = [x/10 for x in self.green] - n1, n2 = self.size width = 2 * math.pi height = math.pi @@ -686,9 +683,11 @@ def tick(self): ix += 1 - # return super().tick() - return self + if self.boundary != 'none': + super().tick() + return self + def randunit(): @@ -798,9 +797,13 @@ async def pause(self): async def reset(self): """ Reset waves """ + await self.cancel() + for ball in self.balls: ball.reset() + await self.start_balls_running() + async def forward(self): """ Move to next sphere """ self.dball += 1 @@ -920,9 +923,15 @@ async def start_balls_running(self): sphere = await curio.spawn(ball.run) spheres.append(sphere) curio.sleep(ball.sleep) - + + self.spheres = spheres return spheres + async def cancel(self): + + for ball in self.spheres: + await ball.cancel() + async def run(self): """ Run the waves """ @@ -960,7 +969,7 @@ async def run(self): def generate_spheres(sizes, clazz=None, mass=None, radii=None, - outer=True): + iboundary='zero', oboundary='zero'): clazz = clazz or NeutronStar xclazz = clazz @@ -975,11 +984,14 @@ def generate_spheres(sizes, clazz=None, mass=None, radii=None, radii = radii or range(n) + dr = radii[-1] - radii[-2] while len(radii) < n: radii.append(radii[-1] + dr) K = 2 + + boundary = iboundary for r, nn, M in zip(radii, sizes[:-1], mass): size = nn @@ -996,9 +1008,10 @@ def generate_spheres(sizes, clazz=None, mass=None, radii=None, #mu = M / 10 mu = None - sphere = clazz(size, r=R, m=M, mu=mu) + sphere = clazz(size, r=R, m=M, mu=mu, boundary=boundary) clazz = Sphere + boundary = 'none' yield sphere @@ -1009,8 +1022,8 @@ def generate_spheres(sizes, clazz=None, mass=None, radii=None, #M = 10 * M #mu = M / 10 print(xclazz) - if outer: - yield xclazz(size=size, r=r+1, m=M, mu=mu) + if oboundary != 'none': + yield xclazz(size=size, r=r+1, m=M, mu=mu, boundary=oboundary) def prime_balls(base, n): @@ -1158,7 +1171,12 @@ def argument_parser(parser=None): parser.add_argument('--base', type=int, default=20) parser.add_argument('--mass', nargs='*', type=float) parser.add_argument('--radii', nargs='*', type=float) - parser.add_argument('--noouter', action='store_false') + parser.add_argument('--iboundary', + choices=['random', 'zero', 'none'], + default='zero') + parser.add_argument('--oboundary', + choices=['random', 'zero', 'none'], + default='zero') return parser @@ -1186,7 +1204,7 @@ def args_to_spheres(args): balls, mass=args.mass, radii=args.radii, - outer=args.noouter)) + iboundary=args.iboundary, oboundary=args.oboundary)) return spheres diff --git a/setup.py b/setup.py index 3cb236a..92d1e7d 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from codecs import open from os import path -__version__ = '1.03141' +__version__ = '1.031415' here = path.abspath(path.dirname(__file__)) From a59a7b815c5fd7b1ed0d4e9fe5bcc6c2e08b1954 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 6 Sep 2018 11:25:16 -0400 Subject: [PATCH 461/642] stamps values and co routines in ncdf pickle --- karmapi/ncdf.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 53363ba..3119895 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -255,16 +255,28 @@ def __init__(self, stamps, values, **kwargs): # take 3 at a time for r g b - async def tick(self): + def __getstate__(self): + """ """ + state = self.__dict__.copy() + state.update(dict(stamps=None, values=None)) + return state - self.t += 1 + def update(self, ball): + + super().update(ball) + print(self.current_date()) self.next_frame() - now = self.current_date() - print(now) + + def tick(self): + + self.t += 1 + if self.save: im = self.project() im.save(f'{self.save}/{now}.png') + + return self def current(self): From ae446ab29a481af723a4bab72110ccd9e18eca61 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 14 Sep 2018 08:22:42 -0400 Subject: [PATCH 462/642] bump version number --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 92d1e7d..bc9a91e 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from codecs import open from os import path -__version__ = '1.031415' +__version__ = '1.0314151' here = path.abspath(path.dirname(__file__)) From d04e1662933baaff708e4fac3197b8f10ea894f1 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 24 Sep 2018 18:13:39 -0400 Subject: [PATCH 463/642] kiss goodbye to share data --- karmapi/kiss.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 karmapi/kiss.py diff --git a/karmapi/kiss.py b/karmapi/kiss.py new file mode 100644 index 0000000..b88e295 --- /dev/null +++ b/karmapi/kiss.py @@ -0,0 +1,38 @@ +""" +Kiss goodbye to data + +hello, just the same + +exceptions and all sorts of complications + +keep it simple + +share +""" +from karmapi import checksum, base + +from curio import Q + +history + +async def goodbye(data, **meta) + """ kiss good-bye to data """ + + ck = checksum.checksum(data) + + path = meta.getdefault('path', base.Path('.')) + + # any matches? Somebody else's problem? + # run delta for each match? + + # save a copy? + if not path.exists(): + save(data, path) + # vision test? Looks the same? How to? + + # 2018 aeh eye + + # catch exceptions? + + +hello = goodbye From a3fed5e3b108b934345f6ce3e45a91992f3476f2 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 24 Sep 2018 18:16:30 -0400 Subject: [PATCH 464/642] evolving data sharing with karma kisses --- karmapi/kiss.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/karmapi/kiss.py b/karmapi/kiss.py index b88e295..8e10b6f 100644 --- a/karmapi/kiss.py +++ b/karmapi/kiss.py @@ -11,15 +11,17 @@ """ from karmapi import checksum, base -from curio import Q +from curio import UniversalQuee -history +history = UniversalQuee async def goodbye(data, **meta) """ kiss good-bye to data """ ck = checksum.checksum(data) + # check meta data etc -- see checksum module + path = meta.getdefault('path', base.Path('.')) # any matches? Somebody else's problem? @@ -28,6 +30,7 @@ async def goodbye(data, **meta) # save a copy? if not path.exists(): save(data, path) + # vision test? Looks the same? How to? # 2018 aeh eye From cfe6e58fee22660a55bfe57e5f329b753d2b014e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 4 Oct 2018 18:41:15 -0400 Subject: [PATCH 465/642] 5 * 2 ^ 4 day plan --- docs/80days.rst | 82 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 docs/80days.rst diff --git a/docs/80days.rst b/docs/80days.rst new file mode 100644 index 0000000..7f51c94 --- /dev/null +++ b/docs/80days.rst @@ -0,0 +1,82 @@ +============= + Eighty Days +============= + +A plan for eighty days.:: + + 2 ^ 4 * 5 + +So lots of pairs. An hour a day? + +Work on the bit that interests most. + +So let's start with some assumptions. + +The visible universe is remarkably uniform. + +Gravitational waves exist. + +As matter rotates relative to its background space, it disturbs the +background gravitational field. + +If we assume the magnitude falls off linearly with distance. + +This is intended just to boot-strap an argument. + +de Sciama says the intertial field at a point is defined by:: + + I = sum ( m_k * owega_k / r_k) + +In words, the effect is proportional to the mass of the body and +inversely proportional to its distance away. + +This *omega* thing you can view as the effect this blob of matter has +on the inertial field, as it rides the waves. + +Assertion 1 +----------- + +:: + + Any matter moving (rotating) relative to it's inertial frame sends + out a gravitational wave that matches the extent to whith it is out + of phase with its inertial frame. + + If it actually manages to align itself with the inertial frame then + it will disappear in a burst of energy directed along the angle of + alignment. + + As a wave of frequency as determined by Planck's constant. + + +Matter +------ + +In symmetry, it makes sense to view matter as a standing wave of the +frequency determined by Planck:: + + e = mc^2 + hf + + +Note 1 +------ + +Note 2 +------ + +Symmetry +-------- + +Markov models +------------- + +Climate Data +------------ + +ecmwf 40 year global interim precipitation data. + +Canada nationwide historical weather station data. + +Model the delta, look for discontinuities. + + From e41d67f153df254557bf0bae3c86914946560f0e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 5 Oct 2018 13:56:59 -0400 Subject: [PATCH 466/642] + = typo in day 1 --- docs/80days.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/80days.rst b/docs/80days.rst index 7f51c94..7fd6787 100644 --- a/docs/80days.rst +++ b/docs/80days.rst @@ -55,7 +55,7 @@ Matter In symmetry, it makes sense to view matter as a standing wave of the frequency determined by Planck:: - e = mc^2 + hf + e = mc^2 = hf Note 1 From f8842c348ebf8ac122b556d41ea375c9d3f4774b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 8 Oct 2018 16:15:25 -0400 Subject: [PATCH 467/642] start oo 2 u eh view of the universe --- docs/nodice/oo2ueh.rst | 69 ++++++++++++++++++++++++++++++++++++++++++ karmapi/oo2ueh.py | 65 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+) create mode 100644 docs/nodice/oo2ueh.rst create mode 100644 karmapi/oo2ueh.py diff --git a/docs/nodice/oo2ueh.rst b/docs/nodice/oo2ueh.rst new file mode 100644 index 0000000..d583ce9 --- /dev/null +++ b/docs/nodice/oo2ueh.rst @@ -0,0 +1,69 @@ +============ + Dear Colin +============ + +Thank you very much for taking the time to spend a morning together +recently. + +It was good to be back at Warwick, I barely recognised it. + +I left with much to think about the paradigm. + +Einstein and universal time. + +Why quasars are important. + +Homogeneity of space time. + +de Sitter space, inherently expansive as t increases, distance from +origin does too. + +The de Sciama principle is wonderful in it's simplicity. + +It captures the natural behaviour of waves. + +It is noted that the inertial frame at a point is determined +predominantly by the distant matter in the universe: there is just so +much more of it and gravitational waves drop off only linearly with +distance. + +The fundamental property of these waves is that any matter is moved by +that wave, two bodies exchange deltas at the speed of light. + +The effect is for all matter to tend towards being in phase with it's +surroundings. + +Now while the background inertial field is of considerable interest, +what affects us locally is the delta of our inertial field, relative +to the universal background. + +This delta is dominated by the local matter and so by moving in harmony +can help sustain each other. + + + +Proton diversion +================ + +To boot strap things + +Our window on our universe +========================== + +We see a window of 13 billion years, or maybe we see much more? + +Is the visible universe all there is or is it in a state of constant +re-birth? + +It appears to be extraordinarily uniform, based on existing +observations. + + + +Oort Cloud +========== + + +Earth atmospherics +================== + diff --git a/karmapi/oo2ueh.py b/karmapi/oo2ueh.py new file mode 100644 index 0000000..f6756e7 --- /dev/null +++ b/karmapi/oo2ueh.py @@ -0,0 +1,65 @@ +""" +Explorations in Ottawa weather data + +Data thanks to environment Canada + +http://climate.weather.gc.ca/radar/index_e.html + +""" +import requests + +URL = "http://climate.weather.gc.ca/radar/index_e.html" + +URL = "http://climate.weather.gc.ca/radar/image_e.html?time=07-OCT-18+01.06.42.405345+PM\&site=XFT" + +PARMS = dict( + site='XFT', + year=2018, + month=10, + day=7, + hour=12, + minute=50, + duration=2, + image_type='PRECIPET_RAIN_WEATHEROFFICE', + image=1) + +TURL = "http://climate.weather.gc.ca/radar/image_e.html?time=07-OCT-17+01.00.33.755554+PM&site=XFT" + +ITIMES = [ + '/radar/image_e.html?time=07-OCT-17+01.00.33.755554+PM&site=XFT' + '/radar/image_e.html?time=07-OCT-17+01.10.31.151260+PM&site=XFT', + '/radar/image_e.html?time=07-OCT-17+01.20.28.146381+PM&site=XFT', + '/radar/image_e.html?time=07-OCT-17+01.30.41.084535+PM&site=XFT', + '/radar/image_e.html?time=07-OCT-17+01.40.36.764073+PM&site=XFT', + '/radar/image_e.html?time=07-OCT-17+01.50.31.739783+PM&site=XFT', + '/radar/image_e.html?time=07-OCT-17+02.00.28.468690+PM&site=XFT', + '/radar/image_e.html?time=07-OCT-17+02.10.42.567798+PM&site=XFT', + '/radar/image_e.html?time=07-OCT-17+02.20.55.146242+PM&site=XFT', + '/radar/image_e.html?time=07-OCT-17+02.30.42.623817+PM&site=XFT', + '/radar/image_e.html?time=07-OCT-17+02.51.12.647761+PM&site=XFT', + '/radar/image_e.html?time=07-OCT-17+02.50.57.567531+PM&site=XFT', + '/radar/image_e.html?time=07-OCT-17+03.00.42.884564+PM&site=XFT', + ] + +def find_images(data): + + dump = False + for row in data.split('\n'): + if dump: + print(row) + if row.startswith('blobArray'): + dump = True + +if __name__ == '__main__': + + #print(help(requests.get)) + + result = requests.get(URL, PARMS) + + print(result) + print(type(result.content)) + print(len(result.content)) + find_images(result.content) + + 1/0 + print(result.content.decode()) From 7e0ef61e7e2dc64b2b4d7cf16a97a622be2ef7ad Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 9 Oct 2018 13:18:22 -0400 Subject: [PATCH 468/642] oort ought to help outer spheres --- docs/nodice/oo2ueh.rst | 54 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/docs/nodice/oo2ueh.rst b/docs/nodice/oo2ueh.rst index d583ce9..5d16b4b 100644 --- a/docs/nodice/oo2ueh.rst +++ b/docs/nodice/oo2ueh.rst @@ -31,39 +31,81 @@ The fundamental property of these waves is that any matter is moved by that wave, two bodies exchange deltas at the speed of light. The effect is for all matter to tend towards being in phase with it's -surroundings. +surroundings, from there it's smooth riding. Now while the background inertial field is of considerable interest, what affects us locally is the delta of our inertial field, relative to the universal background. This delta is dominated by the local matter and so by moving in harmony -can help sustain each other. +bodies can help sustain each other, this manifests itself as +gravitational attraction. +The inertial field itself is hard to detect, by definition all matter +in the universe is moving with it in some deep sense. +Locally, nearby masses distort this field. -Proton diversion -================ -To boot strap things Our window on our universe ========================== We see a window of 13 billion years, or maybe we see much more? +There are a lot of different ways of interpretting what we see as we +gaze into the universe. + Is the visible universe all there is or is it in a state of constant re-birth? -It appears to be extraordinarily uniform, based on existing +The new paradigm shows galaxies can sustain themselves for incredible +periods of time. + + +The universe appears to be extraordinarily uniform, based on existing observations. +It is also generally accepted that the visible universe is expansive. + +There are many ways to give rise to such an expansive universe. +For example, assume our visible universe is just some band in a giant +spiral storm. + +With cloud like structure, perhaps a giant winding tube within a wider +space. + +Such structures could be sustained for unimagineable periods of time. Oort Cloud ========== +Closer to home, the *Oort Cloud* has been in the news again. + +This time a suggestion there might be a *planet* of some considerable +mass out there. + +This is an intriguing, solar system formation. + +Perhaps something that simulation can help enhance our understanding. + +It does also suggest that a solar system might be able to sustain +itself much longer than is normally assumed. + +Models do not seem to include considerations of in-flow of new matter +to a system. + +This leads me closer to home and tropical cyclones. + Earth atmospherics ================== + + + +Proton diversion +================ + +To boot strap things ... later? From 4a517e3bf1893f1cb1f576d87f714a65f23c4d07 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 17 Oct 2018 15:31:08 -0400 Subject: [PATCH 469/642] break ncdf see fixme --- karmapi/ncdf.py | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 3119895..9fb2efb 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -133,13 +133,6 @@ def downsample(stamps, values, k=15): -def model(stamps, values): - """ Build a model """ - stamps = list(stamps) - xx = values[stamps[0]] - - print(xx.shape) - def delta(stamps, values): nn = 37 @@ -209,6 +202,14 @@ def saveimage(path, date): pyplot.savefig(str(item), bbox_inches='tight', pad_inches=0) +def model(stamps, values): + """ Build a model """ + stamps = list(stamps) + xx = values[stamps[0]] + + print(xx.shape) + + def model(stamps, values): """ fit a model """ @@ -287,13 +288,14 @@ def current(self): return data def current_date(self): - + """ Get date for current stamp """ s, d, ix = self.stamps[self.ix] return d def next_frame(self): + red = self.scale(self.current()) self.red = red[self.spin:] + red[0:self.spin] @@ -317,8 +319,14 @@ def next_frame(self): for skip in range((9 * 11) + 18): self.forward() - def forward(self): + + # TODO: take a random sample of rgb grid and add to history + # include stamp + fixme + + def forward(self): + """ Step to next frame """ self.ix += 1 self.ix = self.ix % self.n From 6445ae115eb788895e793a323ce34a2c1e120007 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 17 Oct 2018 15:31:29 -0400 Subject: [PATCH 470/642] gamma ray bursts --- karmapi/grb.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 karmapi/grb.py diff --git a/karmapi/grb.py b/karmapi/grb.py new file mode 100644 index 0000000..64b3371 --- /dev/null +++ b/karmapi/grb.py @@ -0,0 +1,17 @@ +import math + +from matplotlib import pyplot as pp + +T = 1000 +k = 10000 + +xx = [x * math.pi / k for x in range(T)] +shint = [math.sinh(x) for x in xx] +cosht = [math.cosh(x) for x in xx] + +#print(xx[-100:]) +#print(yy[-100:]) + +pp.plot(shint, cosht) + +pp.show() From 7715a9aef6dd2cece8f968cbe8f9eedb6f16afbf Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 17 Oct 2018 16:25:54 -0400 Subject: [PATCH 471/642] grasping at rays in the dark --- karmapi/grb.py | 56 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 52 insertions(+), 4 deletions(-) diff --git a/karmapi/grb.py b/karmapi/grb.py index 64b3371..1165fd5 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -1,17 +1,65 @@ +""" +Are gamma-ray bursts optical illusions? + +Robert S MacKay, Colin Rourke + +http://msp.warwick.ac.uk/~cpr/paradigm/GammaRayBursts.pdf + +What is it like when a galaxy emerges into view at the edge of our visible +universe? + +In what follows I am imagining a wider universe that has the similar uniform +structure. + +It appears spirals are a natural thing to arise and perhaps we just see a +window on an expanding arm of a giant spiral of galaxies. + +If we go with this, then from the perspective of the galaxy (the emitter of +light just coming into view from our world) nothing unusual is happening, it is +just cruising along, just like our galaxy. + +What paths have the light waves have taken to get to us and how +long that journey was? + +Note also the new addition to our inertial field, settling in. + +""" + import math +import numpy as np from matplotlib import pyplot as pp + + T = 1000 k = 10000 xx = [x * math.pi / k for x in range(T)] -shint = [math.sinh(x) for x in xx] -cosht = [math.cosh(x) for x in xx] - +shint = np.array([math.sinh(x) for x in xx]) +cosht = np.array([math.cosh(x) for x in xx]) +print(shint.size) #print(xx[-100:]) #print(yy[-100:]) -pp.plot(shint, cosht) +pp.plot(list(shint), list(cosht)) + + +# emitter +shinu = shint.copy() +coshu = cosht.copy() + +alpha = 2 +beta = 1 +gamma = -1 +delta = 1 +e0 = (alpha * shinu) + (beta * coshu) +e1 = (gamma * shinu) + (delta * coshu) + +# 2.2 + +geo_test = - (e0 * shint) + (e1 * cosht) + +pp.plot(geo_test) pp.show() From 5ce72ecbcb41b8e0ee3f432873b13bfb88573d2e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 22 Oct 2018 17:10:34 -0400 Subject: [PATCH 472/642] spectacularly wrong insights --- docs/nodice/grb.rst | 450 +++++++++++++++++++++++++++++++++++++++++++- karmapi/cpr.py | 2 +- karmapi/grb.py | 11 ++ karmapi/ncdf.py | 40 +++- karmapi/nhc.py | 6 +- 5 files changed, 498 insertions(+), 11 deletions(-) diff --git a/docs/nodice/grb.rst b/docs/nodice/grb.rst index 3ae350e..83bb41b 100644 --- a/docs/nodice/grb.rst +++ b/docs/nodice/grb.rst @@ -13,11 +13,15 @@ It is a summary of a joint paper with R MacKay:: Palestinian J Math 5(Spec.1) (2016) 175--197 -You can find it on the web: + http://msp.warwick.ac.uk/~cpr/paradigm/GammaRayBursts.pdf -* http://msp.warwick.ac.uk/~cpr/paradigm/GammaRayBursts.pdf +You can find it on the book on the web:: -* http://msp.warwick.ac.uk/~cpr/paradigm/GammaRayBursts.pdf + http://msp.warwick.ac.uk/~cpr/paradigm/paradigm.pdf + +Or you can get a paper copy:: + + https://www.amazon.ca/new-paradigm-universe-Colin-Rourke-ebook/dp/B076PWQS7M/ I am finding the mathematics heavy going, but the commentary and the ideas are making sense intuitively, at least if I am understanding @@ -35,6 +39,446 @@ View a black hole as a place where time slows down. As such it acts as a giant capacitor, storing up energy before releasing a burst to the surrounding universe. + +Conversation with Colin and Johnny +================================== + +Gamma ray bursts in wikipedia land +---------------------------------- + +introduction and background field +================================= + +Below is a conversation based on an exchange of emails. + +One thing I am finding is how easy it is to be spectacularly wrong, +yet a slight adjustment in perspective give significant insights. + +So I have been reading Colin's book for a while now and it is truly a +fascinating universe. + +The current focus relates to gama ray bursts, and Colin's explanation +of what they may be. + +Johnny +------ + +Hi Colin, + +I've been reading some wikipedia on gamma ray bursts. + +There are some interesting data and other gems out there. + +https://en.wikipedia.org/wiki/Gamma-ray_burst + +This one, when the universe was just 630 million years old: + +https://en.wikipedia.org/wiki/GRB_090423 + +Interesting as you unravel the observations from the explanations. + +On the gamma ray bursts, particularly the energy calculations, seem +to be making assumptions about a wave radiating in all directions. + +This one z=9: + +https://en.wikipedia.org/wiki/GRB_090429B + +The article talks about energy produced, the assumption being that a +giant wave went out in all directions. + + +In your model (de Sitter space), it is just the way the horizon +works, buffering light for a while. + +Your model is very energy efficient, just a galaxy coming over the +horizon at the speed of light towards us, important to recognise +that from it's point of view, nothing dramatic happening, except +perhaps a burst in the other direction as our galaxy emerged in +their visible universe? + +Likely will continue to have a velocity towards us, creating blue +shift, so things may be further away than they seem. + +Then there is this: + +https://en.wikipedia.org/wiki/Gamma-ray_burst#/media/File:BATSE_2704.jpg + +And wondering how it might relate to CMB? + +I haven't look closely, but as far as I can tell there are no +confirmed reports of GRB originating nearby, at least these giant +explosions of energy, which is just as well. + +It would be useful if there was some way to predict the distribution +of velocities of the galaxies becoming visible that we might expect. + +I guess it might be possible to reverse this and assume all GRB +(subject to some filtering?) originate at the edge of the universe +as a galaxy becomes visible. + +Use the observed red shift to figure out the velocity, relative to us? + + +Colin +----- + +The red shifts are artefacts. The GRB comes over the horizon at +nominally infinite speed, so infinite blueshift. They get redshifts by +guessing a nearby galaxy, which in our model is just a galaxy in the +same direction. + +There is nothing going on nearly. These are optical illusions NOT +real explosions. + +The horizon effect as described in the CMB appendix cuts the +infinite blueshift down the observed limit (high gamma ray frequency). +It all needs proper modelling. + +Johnny +------ + +**Got it**. No emitter actually has to make it into our visible +universe, just a beam of light from that emitter. + +I picture things as light beams like rubber bands that are stretched +and squeezed. + +I've started to work through the "Are gamma-ray bursts optical illusions". + +The mathematics hurts my head at times, but I find the plots of u +(emitter "true" time) versus t (receiver time) pretty much show what +is going on. + +Thanks for the guidance here, the picture makes more and more sense. + +If we just go with the assumptions + +1. that the universe is pretty uniform round our way + +2. our visible universe is just a window on a wider universe + and maybe: + +3. Our part appears to be expansive + +Then these optical illusions should be a pretty regular occurrence. + +I've been thinking a lot about -t, the potentially infinite past of the source. + +Potentially, it is limited by the age of the universe where the light +is being emitted, but from the paradigm that can be a potentially +enormous age. + +More generally, the length of -t would be limited by the relative +movement of the receiver and emitter in the distant past. + +It seems we should be able to put some bounds on -t. + +Oh and I see from your email there may be a CMB connection, that +reminds me I need to revisit the CMB. + +One other thought, the relative movement of the emitter and receiver +allows for a lot of variation in the exact structure of the grb -- +which is indeed what we see. + +I've read reports of GRB bursts where on detection they point powerful +telescopes in the x-ray and visible spectrums and see a decay from the +GRB through x-ray to a red shift which then fades -- which I believe +is exactly what we might expect to see from the paper. + +In other cases, the telescopes have just picked up a galaxy in the +general direction of the GRB. I am guessing if you look deep enough +you will generally find something close enough. Indeed, the further +you look the more likely you are to find a good match, so source +galaxies would be biassed to distant ones. + +Near galaxies would presumably block these rays, if it wasn't for +gravitational lensing. + +I've started a new karmapi module, grb.py, working through the paper. +I'll let do a release and let you know if it becomes interesting. + +Thanks again for the pointers. + +Johnny + +(PS) +---- + +Just occurred that the chance that the emitter is actually in the +direction we see it from is probably vanishingly small given all the +lensing effects, or gravitational fog as you put it. + +F.8 in the book is key: earth has moved a lot since the wave set on its way. + +Indeed it is that movement, over the Hubble time, that modulates the +signals we see from each direction. + +And yet, our movement is driven by the same gravitational fields, so I +still feel there might be some correlation to find between GRB and +CMB. + +I'm starting to think about simulating some of this, but it is a slow +process, figuring out just what to simulate. + +I can't get over the simplicity of the model you present, together +with how quickly it becomes complex. + +Johnny + +(Draft) +------- + +This is intriguing:: + + https://en.wikipedia.org/wiki/Cosmic_background_radiation#/media/File:Cobe-cosmic-background-radiation.gif + + Temperature of the cosmic background radiation spectrum as + determined with the COBE satellite: uncorrected (top), corrected + for the dipole term due to our peculiar velocity (middle), and + corrected for contributions from the dipole term and from our + galaxy (bottom). + + +This one too:: + + https://lambda.gsfc.nasa.gov/product/cobe/cobe_images/m_d_53s_1111.gif + +The raw uncorrected image of the galactic microwave background is beautiful. + +This might help locate its centre ;) + +I'm curious about the exact nature of the corrections performed here. +Another rabbit hole. + +One other thought is if a correction is made (and whether one is +needed?) for the Oort cloud? + +Johnny + +Colin +----- + +Hi + +One or two comments:: + + Got it. No emitter actually has to make it into our visible universe, + just a beam of light from that emitter. + +Not quite right. All we ever see of anything is light. Sending light +to us is the same as being in our universe:: + + If we just go with the assumptions + + 1. that the universe is pretty uniform round our way + +We only see a tiny patch of the universe, so of course it seems pretty +uniform. Just like a patch on the earth's surface is roughly a plane:: + + 2. our visible universe is just a window on a wider universe + +Yes, yes.:: + + 3. Our part appears to be expansive + +It's both expanding AND contracting. That's the whole point of the de +Sitter space model. It's just different coords on the same manifold. +Think of it like one of those Escher patterns that do two opposite +things at the same time.:: + + Then these optical illusions should be a pretty regular occurrence. + +The GRBs are part of the contractive flow and the usual observations are +the expansive flow (the "Hubble flow"). Look at the RHS of figure 4 in +our Pal J paper:: + + http://msp.warwick.ac.uk/~cpr/paradigm/GammaRayBursts.pdf + +You see a source arriving as part of the contractive flow (blue shifted) +and then moving over to the expansive flow (red shifted). The big deal +is this: the blue shift part occupies a small part of the time we see +the source whilst the red shift part is seen for an infinite time. +That's why we think the whole thing is expanding. Nearly every source +is part of the expansive flow. The two flows are in exact balance but +it SEEMS that nearly all is expanding. It an observer selection +phenomenon. + +The GRBs are a very regular occurrence. The light from every galaxy we +see started out as a GRB and then settled down to be a well-behaved red +shifted galaxy in the Hubble flow.:: + + In other cases, the telescopes have just picked up a galaxy in the + general direction of the GRB. I am guessing if you look deep enough + you will generally find something close enough. Indeed, the further + you look the more likely you are to find a good match, so source + galaxies would be biassed to distant ones. + +That's pretty much correct,:: + + Near galaxies would presumably block these rays, if it wasn't for + gravitational lensing. + +Not true. They are so intense they soar through the obstruction. +Lensing has nothing to do with it. It's not a lensing phenomenon. It's +the way null geodesics work when a source comes over the horizon into +the visible universe.:: + + Just occurred that the chance that the emitter is actually in the + direction we see it from is probably vanishingly small given all the + lensing effects, or gravitational fog as you put it. + +No. The emitter is in the direction we see it. The fog just delays the +appearance a tiny bit and cuts the received energy down from infinite +(OUCH) to finite.:: + + F.8 in the book is key: earth has moved a lot since the wave set on + its way. Indeed it is that movement, over the Hubble time, that + modulates the signals we see from each direction. + +Don't understand that. The motion of the earth is very slow compared to +the speed of light at which GRBs propagate.:: + + I can't get over the simplicity of the model you present, together + with how quickly it becomes complex. + +Thanks. + +Colin + +Johnny +------ + +**Got it** *No emitter actually has to make it into our visible universe, just a +beam of light from that emitter.* + +:: + Not quite right. All we ever see of anything is light. Sending light + to us is the same as being in our universe + +That is very helpful. + +So a galaxy enters the visible universe, so does it's giant rotating +mass, and a stored up history that we perhaps should see as a gravitational wave. + +I did a quick hunt, there have been attempts to look for gravitational +waves, although the papers date back to 2010 or previous. + +I would expect to see a *twist* in the direction of rotation of the +galaxy (assume distribution of orientations is random?), roughly following the +intensity curve of the GRB. + +This will drop of in strength linearly with distance, so it is not +clear we would detect it with current detectors. + +In 2014 it was deemed to be two black holes, roughly 30 solar masses +colliding a billion years ago. + +So a galaxy of 10^9 solar masses just 10 times the distance away ought +to make an impression? + +Unless our universe already has accounted for its motion which is in +harmony with its surroundings, as are we, modulo the cosmic microwave +background. + +Moving on. **Our part appears to be expansive**:: + + It's both expanding AND contracting. That's the whole point of the de + Sitter space model. It's just different coords on the same manifold. + Think of it like one of those Escher patterns that do two opposite + things at the same time.:: + +And there is an isometry between the two sets of coordinates, that +respects causality, courtesy of the Minkowski metric? + +I like the escher analogy. + +Then these optical illusions should be a pretty regular occurrence.:: + + The GRBs are part of the contractive flow and the usual observations are + the expansive flow (the "Hubble flow"). Look at the RHS of figure 4 in + our Pal J paper:: + + http://msp.warwick.ac.uk/~cpr/paradigm/GammaRayBursts.pdf + + You see a source arriving as part of the contractive flow (blue shifted) + and then moving over to the expansive flow (red shifted). + + The big dealis this:: + + the blue shift part occupies a small part of the time we see the + source whilst the red shift part is seen for an infinite time. + + That's why we think the whole thing is expanding. + + Nearly every source is part of the expansive flow. + + The two flows are in exact balance but it SEEMS that nearly all + is expanding. + + It an observer selection phenomenon. + + +Thanks. This clears up much. + +Arrive with a gamma flash. Live and slowly fade away. + +Arrival and departure rates roughly in balance. + +Now, back to how often do we see these GRB's:: + + The GRBs are a very regular occurrence. The light from every galaxy we + see started out as a GRB and then settled down to be a well-behaved red + shifted galaxy in the Hubble flow. + +I read somewhere about one a day was being detected, with networks of +satellites to help with triangulation. + +So 500 billion galaxies, 12 billion year journey, one a day arrival +feels about right. + + + +More +---- + + + Near galaxies would presumably block these rays, if it wasn't for + gravitational lensing. + + Not true. They are so intense they soar through the obstruction. + Lensing has nothing to do with it. It's not a lensing phenomenon. It's + the way null geodesics work when a source comes over the horizon into + the visible universe.:: + + Just occurred that the chance that the emitter is actually in the + direction we see it from is probably vanishingly small given all the + lensing effects, or gravitational fog as you put it. + + No. The emitter is in the direction we see it. The fog just delays the + appearance a tiny bit and cuts the received energy down from infinite + (OUCH) to finite.:: + + F.8 in the book is key: earth has moved a lot since the wave set on + its way. Indeed it is that movement, over the Hubble time, that + modulates the signals we see from each direction. + + Don't understand that. The motion of the earth is very slow compared to + the speed of light at which GRBs propagate.:: + + I can't get over the simplicity of the model you present, together + with how quickly it becomes complex. + +Thanks. + +Johnny + + +de sitter geodesic isometry + +both causality preserving. + + Mixing of inertial fields ========================= diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 1890fde..6bce202 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -180,7 +180,7 @@ def __init__(self, size=None, self.blue = np.zeros(nn) self.size = size - self.history = None + self.history = {} self.delta = False self.last_ball = None diff --git a/karmapi/grb.py b/karmapi/grb.py index 1165fd5..1789194 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -23,6 +23,14 @@ Note also the new addition to our inertial field, settling in. +Update +====== + +The emitter itself does not need to enter our visible universe. All that is +required is a beam of light from that emitter that enters our visible universe, +and is heading in our direction. + + """ import math @@ -63,3 +71,6 @@ pp.plot(geo_test) pp.show() + + +# TODO plot t against u: receiver and emitter times respectively diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 9fb2efb..56d3341 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -14,6 +14,8 @@ import argparse from pathlib import Path +from random import randint + import netCDF4 import numpy @@ -248,6 +250,8 @@ def __init__(self, stamps, values, **kwargs): self.n = len(self.stamps) self.spin = 5 + self.sample_points() + super().__init__(self.size, **kwargs) # data is some sort of ncdf thing @@ -256,6 +260,15 @@ def __init__(self, stamps, values, **kwargs): # take 3 at a time for r g b + def sample_points(self): + + w, h = self.size + + for pt in range(100): + x, y = randint(0, w), randint(0, h) + + self.points.append(x + (w * y)) + def __getstate__(self): """ """ state = self.__dict__.copy() @@ -312,17 +325,32 @@ def next_frame(self): self.spin %= self.size[0] #self.blue = [0. for x in self.red] + + self.sample_current() self.forward() # fix me - for skip in range((9 * 11) + 18): - self.forward() + #for skip in range((9 * 11) + 18): + # self.forward() - # TODO: take a random sample of rgb grid and add to history - # include stamp - fixme + def sample_current(self): + """ Take a sample of current data + + Add it to history. + """ + if self.ix in self.history: + print('size of history', len(history)) + 1/0 + return + + rgb = [] + for pt in self.points: + value = self.red[pt], self.green[pt], self.blue[pt] + rgb.append(value) + + self.history[self.ix] = rgb def forward(self): @@ -333,7 +361,7 @@ def forward(self): def backward(self): - self.ix == 1 + self.ix -= 1 if self.ix == -1: self.ix += self.n diff --git a/karmapi/nhc.py b/karmapi/nhc.py index 5b429fd..8ad964e 100644 --- a/karmapi/nhc.py +++ b/karmapi/nhc.py @@ -1,11 +1,15 @@ """ -ENSO +ENSO and HURDAT http://www.esrl.noaa.gov/psd/enso/mei/#content """ HURDAT = 'http://www.nhc.noaa.gov/data/hurdat/hurdat2-1851-2015-070616.txt' +HURDAT = 'https://www.nhc.noaa.gov/data/hurdat/hurdat2-1851-2017-050118.txt' + + + import csv import datetime From 9e409536341a78e5ade57537650e23a886d5cf53 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 28 Oct 2018 16:22:22 -0400 Subject: [PATCH 473/642] evolving story of waves and rays --- docs/nodice/grb.rst | 59 ++++++++++++++++++++++++++++++++------------- karmapi/base.py | 8 +++--- 2 files changed, 47 insertions(+), 20 deletions(-) diff --git a/docs/nodice/grb.rst b/docs/nodice/grb.rst index 83bb41b..33dc399 100644 --- a/docs/nodice/grb.rst +++ b/docs/nodice/grb.rst @@ -421,9 +421,12 @@ Then these optical illusions should be a pretty regular occurrence.:: Thanks. This clears up much. +Everything that is in the visible universe is in the expansive part +for all but a vanishingly small part of its life. + Arrive with a gamma flash. Live and slowly fade away. -Arrival and departure rates roughly in balance. +Arrival and departure rates in balance. Now, back to how often do we see these GRB's:: @@ -438,41 +441,63 @@ So 500 billion galaxies, 12 billion year journey, one a day arrival feels about right. - -More ----- - - - Near galaxies would presumably block these rays, if it wasn't for - gravitational lensing. +Returning to: **Near galaxies would presumably block these rays, if it +wasn't for gravitational lensing.**:: Not true. They are so intense they soar through the obstruction. Lensing has nothing to do with it. It's not a lensing phenomenon. It's the way null geodesics work when a source comes over the horizon into the visible universe.:: - Just occurred that the chance that the emitter is actually in the - direction we see it from is probably vanishingly small given all the - lensing effects, or gravitational fog as you put it. +And: **Just occurred that the chance that the emitter is actually in +the direction we see it from is probably vanishingly small given all +the lensing effects, or gravitational fog as you put it.**:: No. The emitter is in the direction we see it. The fog just delays the appearance a tiny bit and cuts the received energy down from infinite (OUCH) to finite.:: - F.8 in the book is key: earth has moved a lot since the wave set on - its way. Indeed it is that movement, over the Hubble time, that - modulates the signals we see from each direction. +And finally, **F.8 in the book is key: earth has moved a lot since the +wave set on its way. Indeed it is that movement, over the Hubble +time, that modulates the signals we see from each direction.**:: Don't understand that. The motion of the earth is very slow compared to - the speed of light at which GRBs propagate.:: + the speed of light at which GRBs propagate. + +Here I was talking about the actual shape of the burst being modulated +by the relative movement of emitter and receiver sincd time -t. - I can't get over the simplicity of the model you present, together - with how quickly it becomes complex. +**I can't get over the simplicity of the model you present, together +with how quickly it becomes complex.** Thanks. Johnny +Recap +===== + +If we just go with the assumptions + +1. that the universe is pretty uniform round our way + +2. our visible universe is just a window on a wider universe + and maybe: + +3. Our part appears to be expansive + +Then these optical illusions should be a pretty regular occurrence. + +Regarding 3., our universe is both expansive and contractive. + +However, we get to observe the expansive part for almost all of an +emitter's life. + +All we ever see of anything is light. Sending light to us is the same +as being in our universe. + +Gravitational waves propogate in the same manner as light. + de sitter geodesic isometry diff --git a/karmapi/base.py b/karmapi/base.py index 0b2cbbc..8b3590e 100644 --- a/karmapi/base.py +++ b/karmapi/base.py @@ -203,7 +203,7 @@ def get_all_meta_data(path): path = [] for field in fields: path.append(field) - + print(path) meta_data = meta.update( load_meta_path(Path(*path))) @@ -266,8 +266,9 @@ def build_from_meta(path): def load_meta_path(path): """ Load meta data a path if it exists """ filename = path / 'meta.json' - + print(filename) if filename.exists(): + print(filename, 'exists') with filename.open() as infile: return json.loads(infile.read()) @@ -360,7 +361,8 @@ def load(path): """ path = Path(path) meta = get_all_meta_data(path) - + print(meta) + if (not path.exists()): # see if a peer has it got = try_pear(path) From bdf1d4c21f03e7fb02587d660aff1e265c2d212b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 28 Oct 2018 16:49:35 -0400 Subject: [PATCH 474/642] which came first the gravitational wave or the gamma ray? --- docs/nodice/grb.rst | 59 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/docs/nodice/grb.rst b/docs/nodice/grb.rst index 33dc399..526daa3 100644 --- a/docs/nodice/grb.rst +++ b/docs/nodice/grb.rst @@ -498,6 +498,65 @@ as being in our universe. Gravitational waves propogate in the same manner as light. +So when a galaxy comes into view, so does its gravitational field. + +There have been two occasions when short duration gamma ray bursts +were seen shortly (1-2 seconds) after a gravitational wave detection. + +The gravitational wave, ought to have similar frequencies and power as +the gamma ray burst. + +We also have to take into account reflections from nearby masses +(moon, sun, planets?). Indeed, if gravity works the way I think it +does, these bodies will act as magnifiers of the signal. + +With the caveat, that those signals will also be modulated by the echo +from earth. + +What we actually see should be the interference pattern from the sum +of these reflections. + +The Earth too reflects the waves, and so we only ever see the delta in +the wave that is arriving [FIXME: write this more clearly] + +To model this adequately, we also have to take account of the size of +a typical galaxy, as well as the much wider region where inertial drag +from the centre of the galaxy is still significant. + +Given the location in the sky of the source of the gamma ray [SGR] + +[SGR] localisation of GRB bursts is limited by the width of the +baseline across all observations. + +Typically, the source can be narrowed to an ellipse, often with a high +ratio between the major and minor axes. + +Regardless, given the source we can draw the wave front as it passes +across our solar system and so calculate the time differences of +arrival of waves taking different paths and so accurately re-construct +the interference pattern. + +Further, we can use the fit to the observed gravitational waves to +narrow down the source location. + +Some numbers to ponder. + +1.3 seconds earth to moon + +8 minutes sun to earth + +30-50 minutes to Jupiter + + +Puzzles +------- + +Why haven't we seen GW associated with the long duration GRB? + +Why haven't we seen events closer to home? + +Why do we see the gravitational wave before the gamma ray? + de sitter geodesic isometry From 44c30610ce4ba68e81e479bd24b08c6e95630d92 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 30 Oct 2018 14:13:00 -0400 Subject: [PATCH 475/642] general unit confusion in astropy land --- karmapi/base.py | 7 +- karmapi/grb.py | 208 ++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 189 insertions(+), 26 deletions(-) diff --git a/karmapi/base.py b/karmapi/base.py index 8b3590e..4186f1b 100644 --- a/karmapi/base.py +++ b/karmapi/base.py @@ -527,10 +527,13 @@ def parse_date(date): while len(fields) < 3: fields.append(1) + + while len(fields) < 6: + fields.append(0) - year, month, day = fields + year, month, day, hour, minute, second = fields - return datetime.date(year, month, day) + return datetime.datetime(year, month, day, hour, minute, second) diff --git a/karmapi/grb.py b/karmapi/grb.py index 1789194..bb20688 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -30,47 +30,207 @@ required is a beam of light from that emitter that enters our visible universe, and is heading in our direction. +Colin:: -""" + Not quite right. All we ever see of anything is light. Sending light + to us is the same as being in our universe + +There was lots more from Colin. See docs/nodice/grb.rst for more on that +story. + +Now if a gamma-ray burst indicates a new galaxy arriving in our visible +universe, with the burst representing the, finite, but unbounded history of the +universe, including the histlory of its inertial drag field. + +This latter, is hypothesised to be driven by a super-massive object (~10^11 +solar masses) at the centre of the galaxy. + +Noting that this field decays linearly with distance, but extends well beyond +the visible part of the galaxy. + +When a galaxy comes into view, not just a big slice of time, but also a large +expanse of space becomes visible in a short space of time. + +I picture this as a wave, like a sunrise, sweeping across our solar system. + +We see gamma ray bursts lasting several minutes, with the frequency rising +rapidly to a sharp peak before slowly tailing off over the next several +minutes. + +It is hypothesised that the gravitational wave that is seen will broadly follow +the shape of the gamma-ray, but over a longer time span. + +It is hypothesised that large masses in our solar system will act to amplify +the signal. + +The result will be echo cancellation due to the different paths that the +gravitational wave can take. + +Echoes will bounce around the solar system as bodies follow the incoming wave +together. + +It also has to be noted that the earth too will act to echo the wave it sees. + +Consider the moon, earth and sun. It takes just 1.3 seconds for light to travel +from earth to moon or vice versa. + +From moon or earth to the sun is around 500 seconds, or 8 minutes 20 seconds. + +Place the earth at the origin and then picture the different path lenghts. + +So, + + P = location of GRB emitter + M = location of moon + S = location of sun + E = earth, location (origin) + +Lengths of interest:: + + deltaS = PSE - PE + + deltaM = PSME - PSE = SME - SE + +Now deltaM is independent of P. + +Given the location in the sky that the GRB actually comes from, we can also get +a better estimate on deltaS. + +We may also be able to work this backwards: given a signal that will place some +constraints on the geometry. + +Jupiter? other planets? + +For now the goal is given a time and a place in the sky P, draw a picture? +""" import math import numpy as np +import argparse + +import datetime + +from astropy import coordinates, constants +from astropy.time import Time from matplotlib import pyplot as pp +from karmapi import base, cpr + + +class SolarSystem(cpr.NestedWaves): + + def __init__(self, *args, **kwargs): + + super().__init__(*args, **kwargs) + +def gamma_hack(): + + T = 1000 + k = 10000 + + xx = [x * math.pi / k for x in range(T)] + shint = np.array([math.sinh(x) for x in xx]) + cosht = np.array([math.cosh(x) for x in xx]) + print(shint.size) + #print(xx[-100:]) + #print(yy[-100:]) + + pp.plot(list(shint), list(cosht)) + + + # emitter + shinu = shint.copy() + coshu = cosht.copy() + + alpha = 2 + beta = 1 + gamma = -1 + delta = 1 + e0 = (alpha * shinu) + (beta * coshu) + e1 = (gamma * shinu) + (delta * coshu) + + # 2.2 + + geo_test = - (e0 * shint) + (e1 * cosht) + + pp.plot(geo_test) + + pp.show() + + + # TODO plot t against u: receiver and emitter times respectively + + +def argument_parser(parser=None): + + parser = parser or argparse.ArgumentParser() + + parser.add_argument('--lat', type=float, default=0.0) + + parser.add_argument('--lon', type=float, default=0.0) + + parser.add_argument('--date', default='2015/09/14/09/50/45') + + return parser + +def get_body(body, t=None): -T = 1000 -k = 10000 + t = t or datetime.datetime.now() -xx = [x * math.pi / k for x in range(T)] -shint = np.array([math.sinh(x) for x in xx]) -cosht = np.array([math.cosh(x) for x in xx]) -print(shint.size) -#print(xx[-100:]) -#print(yy[-100:]) + return coordinates.get_body(body, Time(t)) -pp.plot(list(shint), list(cosht)) +def get_mass(body): -# emitter -shinu = shint.copy() -coshu = cosht.copy() + em = 5.97e24 + + to_earth = 1.0 / em -alpha = 2 -beta = 1 -gamma = -1 -delta = 1 -e0 = (alpha * shinu) + (beta * coshu) -e1 = (gamma * shinu) + (delta * coshu) + print(constants.GM_sun) + print(constants.GM_sun.to_value()) + + masses = dict( + sun = float(constants.GM_sun / em), + moon = 0.073 * to_earth, + mercury = 0.330 * to_earth, + venus = 4.87 * to_earth, + mars = 0.64 * to_earth, + earth = 1.0, + jupiter = 1898 * to_earth, + saturn = 568.0 * to_earth, + uranus = 86.8 * to_earth, + neptune = 102.0 * to_earth, + pluto = 0.0146 * to_earth) -# 2.2 + return masses.get(body) + +if __name__ == '__main__': -geo_test = - (e0 * shint) + (e1 * cosht) + parser = argument_parser() + + args = parser.parse_args() -pp.plot(geo_test) + print(args.date) + args.date = base.parse_date(args.date) -pp.show() + t = args.date + bodies = [ + 'sun', 'moon', + 'mercury', 'venus', + 'earth', + 'mars', 'jupiter', 'saturn', + 'neptune', 'uranus'] + + print("Time of event:", t) -# TODO plot t against u: receiver and emitter times respectively + for body in bodies: + print(body) + print(get_body(body, t)) + print() + print(get_mass(body)) + print() + break + From 26f1d963160b5eb342b928c05699ecf71f7a1bc9 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 5 Nov 2018 11:20:14 -0500 Subject: [PATCH 476/642] grb birthday what where when problem --- karmapi/grb.py | 161 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 136 insertions(+), 25 deletions(-) diff --git a/karmapi/grb.py b/karmapi/grb.py index bb20688..738b17c 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -115,7 +115,21 @@ from matplotlib import pyplot as pp -from karmapi import base, cpr +import curio + +from karmapi import base, cpr, pigfarm + +def angle(d, m, s): + + a = s + a = m + a / 60 + return d + (a / 60) + +LIGO_HLAT = angle( 46, 27, 18.52) +LIGO_HLON = angle(119, 24, 27.56) + +LIGO_LLAT = angle(30, 33, 46.42) +LIGO_LLON = angle(90, 46, 27.27) class SolarSystem(cpr.NestedWaves): @@ -166,9 +180,9 @@ def argument_parser(parser=None): parser = parser or argparse.ArgumentParser() - parser.add_argument('--lat', type=float, default=0.0) + parser.add_argument('--lat', type=float, default=LIGO_HLAT) - parser.add_argument('--lon', type=float, default=0.0) + parser.add_argument('--lon', type=float, default=LIGO_HLON) parser.add_argument('--date', default='2015/09/14/09/50/45') @@ -184,15 +198,12 @@ def get_body(body, t=None): def get_mass(body): - em = 5.97e24 + # masses (10^24 Kg) + em = 5.97 to_earth = 1.0 / em - print(constants.GM_sun) - print(constants.GM_sun.to_value()) - masses = dict( - sun = float(constants.GM_sun / em), moon = 0.073 * to_earth, mercury = 0.330 * to_earth, venus = 4.87 * to_earth, @@ -204,11 +215,106 @@ def get_mass(body): neptune = 102.0 * to_earth, pluto = 0.0146 * to_earth) + sun = masses['jupiter'] * (constants.GM_sun / constants.GM_jup) + masses['sun'] = sun + return masses.get(body) + + +BODIES = [ + 'sun', 'moon', + 'mercury', 'venus', + 'earth', + 'mars', 'jupiter', 'saturn', + 'neptune', 'uranus'] + +RADIUS_OF_EARTH = 6378. +RADIUS_OF_SUN = 1.391e6 -if __name__ == '__main__': +def au2earth(value=1): + """ Convert astronomical units to earth radii """ + + # earth to sun + e2s = float(constants.c.to('km/s').value) * 499.0 + print(e2s) + return value * e2s / 6378 + + +def display_body(name, t): + + print("Time of event:", t) + print("Viewing from:", name) + target = get_body(name, t) + results = {} + for body in BODIES: + print(body) + + bd = body_data(body, t) - parser = argument_parser() + mass = bd['m'] + bod = bd['body'] + + if body == name: + if name in ['earth', 'sun']: + r = bd['r'] + else: + r = target.separation_3d(bod) + + print(bod) + print('mass:', mass) + print(f'distance to {name}: {r}') + print('m over r:', mass / r) + print() + print() + + return results + +def get_distance(): + pass + +def body_data(name, t): + + bod = get_body(name, t) + mass = get_mass(name) + radius = None + if name == 'earth': + radius = 6378 / 1.5e8 + elif name == 'sun': + radius = 1.391e6 / au2earth(1) + + return dict( + r=radius, + m=mass, + name=name, + body=bod) + + +class Body(cpr.Sphere): + + + def __init__(self, name, t, size=None): + """ Initialise the body """ + bd = body_data(name, t) + self.body = bd['body'] + + super().__init__(size=size, t=t, m=bd['m'], r=bd['r']) + + def separation(self, body): + """ Return distance to body """ + return self.body.separation_3d(body) + + +def args_to_spheres(args, t): + + spheres = [] + for body in BODIES: + spheres.append(Body(body, t=t)) + + return spheres + +def main(): + + parser = argument_parser(cpr.argument_parser()) args = parser.parse_args() @@ -217,20 +323,25 @@ def get_mass(body): t = args.date - bodies = [ - 'sun', 'moon', - 'mercury', 'venus', - 'earth', - 'mars', 'jupiter', 'saturn', - 'neptune', 'uranus'] - - print("Time of event:", t) + earth = display_body('earth', t) + sun = display_body('sun', t) - for body in bodies: - print(body) - print(get_body(body, t)) - print() - print(get_mass(body)) - print() - break + + for k,v in earth.items(): + print(f'{k}: {v["moverr"]}') + + + # pass list of balls into NestedWaves + spheres = args_to_spheres(args, t) + farm = pigfarm.sty(SolarSystem, dict(balls=spheres, fade=args.fade, + twist=args.twist)) + + curio.run(farm.run, with_monitor=True) + + + +if __name__ == '__main__': + + main() + From 9dd4a0a646a4513ab7fabfc6dca74690238a527c Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 8 Nov 2018 12:10:08 -0500 Subject: [PATCH 477/642] adaptive tankrain image smoothing?? --- karmapi/tankrain.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index 84a67b1..3b2b746 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -59,6 +59,7 @@ def __init__(self, parent, path=None, version='local', date=None, self.save_folder = save self.timewarp = 0 self.cut = 0 + self.last_data = None self.date = date if self.date is None: self.date = utcnow() @@ -88,7 +89,31 @@ def load_images(self): self.inc = 1 def compute_data(self): + """ Set up self.data as the image + TODO: save history, alpha smoothing, skip to next if delta small + """ + if self.last_data is None: + self._compute_data() + self.last_data = self.data + return + + self._compute_data() + alpha = 0.1 + beta = 1.0 - alpha + + while self.diff() < 20.: + + self.last_data = (alpha * self.last_data) + (beta * self.data) + self._compute_data() + + self.data, self.last_data = self.last_data, self.data + + def _compute_data(self): + """ Set self.data to image for current ix + + also increment self.ix. + """ from PIL import Image ix = self.ix @@ -112,6 +137,15 @@ def compute_data(self): self.data = im + def diff(self): + + print(type(self.data), type(self.last_data)) + a, b = self.data, self.last_data + + diff = a - b + print(type(diff)) + + return 21.0 def when(self): """ current date """ From 9e29fedb061e6a76bfd7ae23f05372a4c3bea1db Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 8 Nov 2018 14:32:10 -0500 Subject: [PATCH 478/642] tankrain image diffing sort of working --- karmapi/tankrain.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index 3b2b746..2ed43d8 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -20,6 +20,7 @@ import itertools import argparse import random +import numpy as np import datetime utcnow = datetime.datetime.utcnow @@ -139,13 +140,14 @@ def _compute_data(self): def diff(self): - print(type(self.data), type(self.last_data)) a, b = self.data, self.last_data - diff = a - b - print(type(diff)) + diff = np.array(a.getdata()) - np.array(b.getdata()) - return 21.0 + diff = (diff * diff).sum() / diff.size + + print('DIFF', diff) + return diff def when(self): """ current date """ From 8f6e1593baf79e720f95e32803b500d7d8993977 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 8 Nov 2018 20:24:48 -0500 Subject: [PATCH 479/642] image diff diff for tankrain --- karmapi/tankrain.py | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index 2ed43d8..35aa6ad 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -102,11 +102,15 @@ def compute_data(self): self._compute_data() alpha = 0.1 beta = 1.0 - alpha - - while self.diff() < 20.: + + + ix = self.ix + while self.diff() < 7.: - self.last_data = (alpha * self.last_data) + (beta * self.data) + self.last_data = (alpha * self.tonp(self.last_data)) + (beta * self.tonp(self.data)) self._compute_data() + if ix == self.ix: + break self.data, self.last_data = self.last_data, self.data @@ -125,7 +129,7 @@ def _compute_data(self): # FIXME -- create an image that shows there is no data # for now, lets just show a rainbow rainbow = [x for x in range(100)] - im = [rainbow] * 100 + im = np.array([rainbow] * 100) n = len(self.paths) ix = ix + self.inc @@ -138,11 +142,22 @@ def _compute_data(self): self.data = im + def tonp(self, data): + + if hasattr(data, 'getdata'): + data = np.array(data.getdata()) + + return data + def diff(self): - a, b = self.data, self.last_data + adata, bdata = self.tonp(self.data), self.tonp(self.last_data) + + if adata.size != bdata.size: + return 1000.0 - diff = np.array(a.getdata()) - np.array(b.getdata()) + diff = np.array(adata) - np.array(bdata) + print(diff.size) diff = (diff * diff).sum() / diff.size From abf38969d1ccede371565bfb750d45a97d52399f Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 13 Nov 2018 10:37:53 -0500 Subject: [PATCH 480/642] numpy breakage woes with cpr --- karmapi/cpr.py | 207 ++++++++++++++++---------------------------- karmapi/ncdf.py | 1 + karmapi/tankrain.py | 55 +++++++++--- 3 files changed, 116 insertions(+), 147 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 6bce202..a8ad0a3 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -173,11 +173,9 @@ def __init__(self, size=None, # resolution size = size or (4, 4) - nn = size[0] * size[1] - - self.red = np.zeros(nn) - self.green = np.zeros(nn) - self.blue = np.zeros(nn) + ww, hh = size + + self.rgb = np.zeros(shape=(ww, hh, 3)) self.size = size self.history = {} @@ -241,42 +239,42 @@ def random_grid(self): width, height = self.size nn = width * height - self.red = (np.random.random(nn) - 0.5) * 2 - self.green = (np.random.random(nn) - 0.5) * 2 - self.blue = (np.random.random(nn) - 0.5) * 2 - + self.rgb = (np.random.random(size=(width, height, 3)) - 0.5) * 2 - def project(self, view=None): - """ Turn into a PIL? """ + def get_views(self): + views = dict( grid=self.rgb2grid, northpole=self.northpole, southpole=self.southpole, uphemi=self.uphemi, lowhemi=self.lowhemi) + + return views + + def project(self, view): + """ Turn into a PIL? """ - image = Image.new('RGB', (self.size[0], self.size[1])) + #image = Image.new('RGB', (self.size[0], self.size[1])) # FIXME do the 256 magic int stuff here + pixels = self.quantise(self.rgb).astype(np.uint8) - #print('rgb', len(self.red), len(self.green), len(self.blue)) + pixels = self.get_views().get(view, self.rgb2grid)(pixels) + print('PPPP', view, pixels.shape) - project = views.get(view, self.rgb2grid) - print(view) - - image.putdata(project()) + image = Image.fromarray(pixels) return image - def rgb2grid(self): + def rgb2grid(self, pixels=None): """ Change lists of red green blue to a pixel grid""" - grid = [] - for rgb in zip(self.red, self.green, self.blue): - pixel = tuple(self.quantise(x) for x in rgb) - grid.append(pixel) + if pixels is None: + pixels = self.quantise(self.rgb) + print('ffffffffffffff') + return pixels - return grid def poleview(self, pixels, scale=1, wind=1): """ View from a pole """ @@ -284,63 +282,54 @@ def poleview(self, pixels, scale=1, wind=1): # make black everywhere width, height = self.size - - grid = [(127, 127, 127)] * width * height + grid = np.zeros(shape=pixels.shape, dtype=np.uint8) + grid += 127 xorig = int(width / 2) yorig = int(height/ 2) - - for ix, rgb in enumerate(pixels): - pixel = tuple(self.quantise(x) for x in rgb) - xx = ix % width - yy = ix // height + ww, hh, bands = grid.shape + + for xx in range(ww): + for yy in range(hh): - #if yy >= height / 2: - # break - - # so radius yy from centre and xx how far round the circle - angle = wind * xx * 2 * math.pi / width + # so radius yy from centre and xx how far round the circle + angle = wind * xx * 2 * math.pi / width - xoff = yy * math.cos(angle) / scale - yoff = yy * math.sin(angle) / scale - - xpos = int(xorig + xoff) - ypos = int(yorig + yoff) + xoff = yy * math.cos(angle) / scale + yoff = yy * math.sin(angle) / scale - target = xpos + ypos * width + xpos = int(xorig + xoff) + ypos = int(yorig + yoff) - ix = ix % (width * height) + xpos = xpos % ww + ypos = ypos % hh + + grid[xpos][ypos] = pixels[xx][yy] - target %= width * height - - grid[target] = pixel - return grid - def northpole(self): + def northpole(self, pixels): """ Give a circular view from the north pole """ - pixels = zip(self.red, self.green, self.blue) - return self.poleview(pixels, scale=2) - def southpole(self): + def southpole(self, pixels): """ Give a circular view from the south pole """ - pixels = zip(self.red[::-1], self.green[::-1], self.blue[::-1]) + pixels = pixels[::-1] return self.poleview(pixels, scale=2, wind=-1) - def uphemi(self): + def uphemi(self, pixels): """ show upper hemisphere """ - nn = int(len(self.red) / 2) - pixels = zip(self.red[:nn], self.green[:nn], self.blue[:nn]) + nn = int(pixels.shape[0] /2) + pixels = pixels[:nn] return self.poleview(pixels) - def lowhemi(self): + def lowhemi(self, pixels): """ show lower hemisphere """ - nn = int(len(self.red) / 2) - pixels = zip(self.red[nn::-1], self.green[nn::-1], self.blue[nn::-1]) + nn = int(len(pixels) / 2) + pixels = pixels[::-1] return self.poleview(pixels, wind=-1) @@ -370,7 +359,6 @@ async def run(self): while True: ball = await curio.run_in_process(self.tick) print(f'{self} sleep:{self.sleep}') - print('ID', id(ball), id(self)) self.update(ball) @@ -391,9 +379,8 @@ async def magic_tick(self): def update(self, ball): - self.red = ball.red - self.blue = ball.blue - self.green = ball.green + self.rgb = ball.rgb + self.t = ball.t @@ -465,12 +452,12 @@ def tick(self): if self.boundary == 'random': nbc = tuple(randunit() for c in 'rgb') - tix = cix = (y * n1) + x + tix = cix = y, x if n1 == n2 and self.twist: - tix = (x * n1) + y + tix = tuple(reversed(tix)) - cbc = (self.red[cix], self.green[cix], self.blue[cix]) + cbc = self.rgb[cix[0]][cix[1]] #print(lbc, cbc, nbc) @@ -480,12 +467,7 @@ def tick(self): for aa, bb, cc in zip(lbc, cbc, nbc)] - grid[tix] = value - - - - self.grid2rgb(grid) - #self.normalise() + self.rgb[tix[0]][tix[1]] = value return self @@ -504,58 +486,16 @@ def weight(self, ball): return weight - def grid2rgb(self, value): - - for ix, (r, g, b) in enumerate(value): - self.red[ix] = r - self.green[ix] = g - self.blue[ix] = b - - def quantise(self, value): - value = value - int(value) + value = value - np.trunc(value) - value = int(127 + (value * 128)) - value = int(value % 256) + value = 127 + (value * 128) + value = np.trunc(value % 256) return value - def normalise(self): - """ Normalise the grid - - want mean for each colour to be 127 - - let's just scale so range is 0-255 - """ - - off = [] - scale = [] - grid = self.rgb2grid() - for ix in range(len(grid[0])): - amin = min(x[ix] for x in grid) - amax = min(x[ix] for x in grid) - - if amax != amin: - sc = 255 / (amax - amin) - else: - sc = 1.0 - - scale.append(sc) - off.append(amin) - - - grid = [] - for values in self.grid: - value = tuple(int((x-ff) * sc) - for x, sc, ff in zip(values, scale, off)) - - grid.append(value) - - # back to rgb - self.grid2rgb(grid) - - + def setup_wave(self): """ Do some set up work for a sphere with mass """ @@ -613,9 +553,7 @@ def sample(self, x1, y1, x2, y2): yk2 = yk // 2 yy = randint(yy - yk2, yy + yk - (1 + yk2)) - ix = (yy * self.size[0]) + xx - - return self.red[ix], self.green[ix], self.blue[ix] + return self.rgb[xx][yy] @@ -659,8 +597,11 @@ def tick(self): n1, n2 = self.size width = 2 * math.pi height = math.pi - - ix = 0 + + rc, rphase, rscale = self.waves['r'] + gc, gphase, gscale = self.waves['g'] + bc, bphase, bscale = self.waves['b'] + for x in range(n1): xx = ((x / n1) + (1 / (2 * n1))) * 2 * math.pi @@ -671,17 +612,14 @@ def tick(self): yy = (y / n2) + (1 / (2 * n2)) * 2 * math.pi yy += self.inc * self.t - rc, rphase, rscale = self.waves['r'] - gc, gphase, gscale = self.waves['g'] - bc, bphase, bscale = self.waves['b'] - - self.red[ix] = sample_wave(rphase, xx) * rscale - self.blue[ix] = sample_wave(bphase, yy) * bscale + self.rgb[x][y][0] = sample_wave(rphase, xx) * rscale + self.rgb[x][y][1] = sample_wave(bphase, yy) * bscale # not sure xx is the right thing here - self.green[ix] = sample_wave(gphase, xx) * gscale + self.rgb[x][y][2] = sample_wave(gphase, xx) * gscale + - ix += 1 + print('NEUTRON') if self.boundary != 'none': super().tick() @@ -888,7 +826,7 @@ def pick(self): """ Choose a ball """ return self.balls[randint(0, self.n-1)] - async def draw(self): + def draw(self): # xx = randint(0, self.n - 1) xx = self.dball @@ -896,10 +834,10 @@ async def draw(self): ball = self.balls[xx] print(xx, 'lucky for some', ball.size, ball.M) - await self.draw_ball(ball) + self.draw_ball(ball) - async def draw_ball(self, ball): + def draw_ball(self, ball): """ wc has everything???? feels like I have written this bit 20 times @@ -907,6 +845,7 @@ async def draw_ball(self, ball): width, height = self.width, self.height image = ball.project(self.views[self.view]) + print('iiiiiii', image, self.view) image = image.resize((int(width), int(height))) @@ -922,7 +861,7 @@ async def start_balls_running(self): for ball in self.balls: sphere = await curio.spawn(ball.run) spheres.append(sphere) - curio.sleep(ball.sleep) + await curio.sleep(ball.sleep) self.spheres = spheres return spheres @@ -954,7 +893,7 @@ async def run(self): self.canvas.delete('all') - await self.draw() + self.draw() print('ball drawn') #await self.step_balls() await curio.sleep(self.sleep) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 56d3341..5ca4a5f 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -264,6 +264,7 @@ def sample_points(self): w, h = self.size + self.points = [] for pt in range(100): x, y = randint(0, w), randint(0, h) diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index 35aa6ad..96e7b1b 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -21,6 +21,8 @@ import argparse import random import numpy as np +from PIL import Image, ImageTk + import datetime utcnow = datetime.datetime.utcnow @@ -32,7 +34,7 @@ import curio -from karmapi import show, base +from karmapi import show, base, cpr from karmapi import pigfarm, checksum @@ -48,7 +50,7 @@ target = 'tankrain/{date.year}/{date.month}/{date.day}/{name}_{date:%H%M}{suffix}' -class TankRain(pigfarm.MagicCarpet): +class TankRain(pigfarm.Yard): """ Widget to show tankrain images """ def __init__(self, parent, path=None, version='local', date=None, @@ -100,6 +102,8 @@ def compute_data(self): return self._compute_data() + return + alpha = 0.1 beta = 1.0 - alpha @@ -119,17 +123,21 @@ def _compute_data(self): also increment self.ix. """ - from PIL import Image - ix = self.ix if ix < len(self.paths): im = Image.open(self.paths[ix]) + ball = cpr.Sphere(im.size) + xx = list(im.getdata()) + print(xx[0]) + ball.grid2rgb(list(im.getdata())) + print('RRRRR', ix, ball.red) else: # FIXME -- create an image that shows there is no data # for now, lets just show a rainbow - rainbow = [x for x in range(100)] - im = np.array([rainbow] * 100) + #rainbow = [x for x in range(100)] + #im = np.array([rainbow] * 100) + ball = cpr.Sphere(im.size) n = len(self.paths) ix = ix + self.inc @@ -139,7 +147,8 @@ def _compute_data(self): ix = len(self.paths) - 1 self.ix = ix - + print('ixixixi', ix, self.ix, n, self.inc) + self.ball = ball self.data = im def tonp(self, data): @@ -307,12 +316,31 @@ async def start(self): pass + def draw_ball(self, ball): + """ wc has everything???? + + feels like I have written this bit 20 times + """ + width, height = self.width, self.height + + image = ball.project() + print(image.getdata()) + + image = image.resize((int(width), int(height))) + + self.phim = phim = ImageTk.PhotoImage(image) + + xx = int(width / 2) + yy = int(height / 2) + self.canvas.create_image(xx, yy, image=phim) + + async def run(self): # use yosser? ironically awaiting yosser #await pigfarm.aside(runfetch) - self.dark() + #self.dark() while True: if self.paused: await curio.sleep(self.sleep) @@ -324,18 +352,19 @@ async def run(self): title = f'{self.ix} : {len(self.paths)} {self.path}' self.compute_data() - self.axes.clear() + #self.axes.clear() print('TITLE:', title) try: #self.axes.set_title(title, color=self.title) - self.axes.set_title(title, color=self.title or 'k') - - self.axes.imshow(self.data) + #self.axes.set_title(title, color=self.title or 'k') + + self.draw_ball(self.ball) + #self.axes.imshow(self.data) except OSError: print('dodgy image:', self.paths[self.ix]) - self.draw() + #self.draw() await curio.sleep(self.sleep) From 3bc314d9e6401ac68214c828e0f38e9d2abaf3e0 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 13 Nov 2018 13:37:00 -0500 Subject: [PATCH 481/642] cpr working again with added numpy speed --- karmapi/cpr.py | 52 ++++++++++++++++++++------------------------------ 1 file changed, 21 insertions(+), 31 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index a8ad0a3..a96fb1d 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -254,7 +254,7 @@ def get_views(self): return views def project(self, view): - """ Turn into a PIL? """ + """ Quantise and project the data """ #image = Image.new('RGB', (self.size[0], self.size[1])) @@ -264,9 +264,7 @@ def project(self, view): pixels = self.get_views().get(view, self.rgb2grid)(pixels) print('PPPP', view, pixels.shape) - image = Image.fromarray(pixels) - - return image + return pixels def rgb2grid(self, pixels=None): """ Change lists of red green blue to a pixel grid""" @@ -282,16 +280,17 @@ def poleview(self, pixels, scale=1, wind=1): # make black everywhere width, height = self.size - grid = np.zeros(shape=pixels.shape, dtype=np.uint8) + grid = np.zeros(shape=(width, height, 3), dtype=np.uint8) grid += 127 xorig = int(width / 2) yorig = int(height/ 2) - ww, hh, bands = grid.shape + ww, hh, bands = pixels.shape + print('ww hh', pixels.shape) - for xx in range(ww): - for yy in range(hh): + for xx in range(hh): + for yy in range(ww): # so radius yy from centre and xx how far round the circle angle = wind * xx * 2 * math.pi / width @@ -302,10 +301,10 @@ def poleview(self, pixels, scale=1, wind=1): xpos = int(xorig + xoff) ypos = int(yorig + yoff) - xpos = xpos % ww - ypos = ypos % hh + xpos = xpos % height + ypos = ypos % width - grid[xpos][ypos] = pixels[xx][yy] + grid[ypos][xpos] = pixels[yy][xx] return grid @@ -321,7 +320,7 @@ def southpole(self, pixels): def uphemi(self, pixels): """ show upper hemisphere """ - nn = int(pixels.shape[0] /2) + nn = int(pixels.shape[0] / 2) pixels = pixels[:nn] return self.poleview(pixels) @@ -329,7 +328,7 @@ def uphemi(self, pixels): def lowhemi(self, pixels): """ show lower hemisphere """ nn = int(len(pixels) / 2) - pixels = pixels[::-1] + pixels = pixels[::-1][:nn] return self.poleview(pixels, wind=-1) @@ -358,24 +357,14 @@ async def run(self): while True: ball = await curio.run_in_process(self.tick) - print(f'{self} sleep:{self.sleep}') + #print(f'{self} sleep:{self.sleep}') self.update(ball) #ball = await tick.join() - print('joined', ball, self.sleep) + #print('joined', ball, self.sleep) await curio.sleep(self.sleep) - async def magic_tick(self): - """ Run a tick in another process """ - - ball = await curio.run_in_process(self.tick) - #print('ID', id(ball), id(self), self.t) - print(ball, self.last_ball, self.next_ball) - - # GOTCHA should may be look before I leap??? - #self.__dict__.update(ball.__dict__) - self.update(ball) def update(self, ball): @@ -491,7 +480,7 @@ def quantise(self, value): value = value - np.trunc(value) value = 127 + (value * 128) - value = np.trunc(value % 256) + value = np.clip(value, 0, 255) return value @@ -619,11 +608,11 @@ def tick(self): self.rgb[x][y][2] = sample_wave(gphase, xx) * gscale - print('NEUTRON') - if self.boundary != 'none': super().tick() - + else: + self.t += 1 + return self @@ -845,10 +834,11 @@ def draw_ball(self, ball): width, height = self.width, self.height image = ball.project(self.views[self.view]) - print('iiiiiii', image, self.view) + #image = image[::, ::, 1] + image = Image.fromarray(image) image = image.resize((int(width), int(height))) - + self.phim = phim = ImageTk.PhotoImage(image) xx = int(self.width / 2) From ce79fa2ad20ed661a587eeff135113cce119f2b7 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 13 Nov 2018 14:26:35 -0500 Subject: [PATCH 482/642] tankrain now uses cpr balls --- karmapi/cpr.py | 8 +++++--- karmapi/tankrain.py | 21 +++++++++++---------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index a96fb1d..bc3f5f3 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -253,13 +253,16 @@ def get_views(self): return views - def project(self, view): + def project(self, view, quantise=True): """ Quantise and project the data """ #image = Image.new('RGB', (self.size[0], self.size[1])) # FIXME do the 256 magic int stuff here - pixels = self.quantise(self.rgb).astype(np.uint8) + if quantise: + pixels = self.quantise(self.rgb).astype(np.uint8) + else: + pixels = self.rgb pixels = self.get_views().get(view, self.rgb2grid)(pixels) print('PPPP', view, pixels.shape) @@ -270,7 +273,6 @@ def rgb2grid(self, pixels=None): """ Change lists of red green blue to a pixel grid""" if pixels is None: pixels = self.quantise(self.rgb) - print('ffffffffffffff') return pixels diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index 96e7b1b..8fb8d61 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -20,6 +20,7 @@ import itertools import argparse import random +import sys import numpy as np from PIL import Image, ImageTk @@ -128,16 +129,16 @@ def _compute_data(self): if ix < len(self.paths): im = Image.open(self.paths[ix]) ball = cpr.Sphere(im.size) - xx = list(im.getdata()) - print(xx[0]) - ball.grid2rgb(list(im.getdata())) - print('RRRRR', ix, ball.red) + + ball.rgb = np.array(im) else: # FIXME -- create an image that shows there is no data # for now, lets just show a rainbow - #rainbow = [x for x in range(100)] - #im = np.array([rainbow] * 100) - ball = cpr.Sphere(im.size) + rainbow = [x for x in range(100)] + im = np.array([rainbow] * 100, dtype=np.uint8) + im.resize((100, 100)) + ball = cpr.Sphere(im.shape) + ball.rgb = im n = len(self.paths) ix = ix + self.inc @@ -323,9 +324,9 @@ def draw_ball(self, ball): """ width, height = self.width, self.height - image = ball.project() - print(image.getdata()) - + image = ball.project('', quantise=False) + print('xxxxxxxxxx', type(image), image.shape) + image = Image.fromarray(image) image = image.resize((int(width), int(height))) self.phim = phim = ImageTk.PhotoImage(image) From 21b5405d95dfd739a6db18dadb7db154c3d09f78 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 14 Nov 2018 13:09:59 -0500 Subject: [PATCH 483/642] ncdf working again with new cpr --- karmapi/cpr.py | 4 ++-- karmapi/ncdf.py | 32 ++++++++++++++++++-------------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index bc3f5f3..99655b6 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -259,7 +259,8 @@ def project(self, view, quantise=True): #image = Image.new('RGB', (self.size[0], self.size[1])) # FIXME do the 256 magic int stuff here - if quantise: + if self.rgb.dtype != np.uint8: + print('quantising') pixels = self.quantise(self.rgb).astype(np.uint8) else: pixels = self.rgb @@ -397,7 +398,6 @@ def tick(self): n1, n2 = self.size - grid = [0] * n1 * n2 ix = 0 deltax = (1 / (2 * n1)) * 2 * math.pi deltay = (1 / (2 * n2)) * 2 * math.pi diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 5ca4a5f..06dd0ed 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -17,7 +17,7 @@ from random import randint import netCDF4 -import numpy +import numpy as np import curio @@ -112,7 +112,7 @@ def pcs(stamps, values, n=None): print(date) records.append(data[lon]) - records = numpy.array(records) + records = np.array(records) print(records.shape) @@ -243,7 +243,8 @@ def __init__(self, stamps, values, **kwargs): self.values = values self.save = False self.size = self.values[0].shape - self.size = self.size[1], self.size[0] + #self.size = self.size[1], self.size[0] + print('SIZE', self.size) self.min = self.values[0].min() self.max = self.values[0].max() self.ix = 0 @@ -262,13 +263,14 @@ def __init__(self, stamps, values, **kwargs): def sample_points(self): - w, h = self.size + h, w = self.size self.points = [] for pt in range(100): - x, y = randint(0, w), randint(0, h) - - self.points.append(x + (w * y)) + x, y = randint(0, h-1), randint(0, w-1) + + self.points.append((x, y)) + def __getstate__(self): """ """ @@ -311,21 +313,23 @@ def next_frame(self): red = self.scale(self.current()) - self.red = red[self.spin:] + red[0:self.spin] + red = red[self.spin:] + red[0:self.spin] self.forward() green = self.scale(self.current()) - self.green = green[self.spin:] + green[0:self.spin] - #self.green = [0. for x in self.red] + green = green[self.spin:] + green[0:self.spin] self.forward() blue = self.scale(self.current()) - self.blue = blue[self.spin:] + blue[0:self.spin] + blue = blue[self.spin:] + blue[0:self.spin] self.spin += 5 self.spin %= self.size[0] - #self.blue = [0. for x in self.red] + self.rgb = np.array(list(zip(red, green, blue))) + + height, width = self.size + self.rgb.resize((height, width, 3)) self.sample_current() @@ -347,8 +351,8 @@ def sample_current(self): return rgb = [] - for pt in self.points: - value = self.red[pt], self.green[pt], self.blue[pt] + for xx, yy in self.points: + value = self.rgb[xx, yy] rgb.append(value) self.history[self.ix] = rgb From 23ee8b2168a99b66b7177978b4fd2e2534160a96 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 16 Nov 2018 16:07:10 -0500 Subject: [PATCH 484/642] grb solar system coordinates --- karmapi/grb.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/karmapi/grb.py b/karmapi/grb.py index 738b17c..b7279ce 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -138,6 +138,22 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + + def draw(self): + """ Draw the balls """ + ball = self.balls[self.dball] + print('current ball', ball.name, ball) + + for body in self.balls: + name = body.name + where = body.body.transform_to(ball.body) + #print(name, where) + print(name, where.ra, where.dec) + + self.canvas.draw + + print() + def gamma_hack(): T = 1000 @@ -294,11 +310,16 @@ class Body(cpr.Sphere): def __init__(self, name, t, size=None): """ Initialise the body """ + self.name = name bd = body_data(name, t) self.body = bd['body'] - super().__init__(size=size, t=t, m=bd['m'], r=bd['r']) + super().__init__(size=size, t=t.timestamp(), m=bd['m'], r=bd['r']) + + def tick(self): + return self + def separation(self, body): """ Return distance to body """ return self.body.separation_3d(body) From 253a04cf763cee91db98771a2f65aa13d62a8b10 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 18 Nov 2018 16:29:02 -0500 Subject: [PATCH 485/642] lamb stew time while planets wander grb --- karmapi/grb.py | 87 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 82 insertions(+), 5 deletions(-) diff --git a/karmapi/grb.py b/karmapi/grb.py index b7279ce..0dcce8e 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -108,7 +108,7 @@ import numpy as np import argparse -import datetime +from datetime import datetime as dt from astropy import coordinates, constants from astropy.time import Time @@ -138,22 +138,66 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - def draw(self): """ Draw the balls """ ball = self.balls[self.dball] print('current ball', ball.name, ball) + cv = self.canvas + cv.create_text( + (self.width/2, 50), + text=ball.name, + fill='skyblue', + font=pigfarm.BIGLY_FONT) + for body in self.balls: + body.tick() + if body is ball: + continue name = body.name where = body.body.transform_to(ball.body) #print(name, where) - print(name, where.ra, where.dec) + print(name.upper(), where.ra, where.dec) + print(name, + where.ra - body.body.ra, + where.dec - body.body.dec) + + xx, yy = self.draw_ball(where.dec.value, where.ra.value) + cv.create_text( + (xx - 30, yy + 20), + text=name, fill='cyan') - self.canvas.draw print() + def draw_ball(self, dec, ra, fill='yellow', size=10, + xx=None, yy=None, **kwargs): + """ Draw a filled circle at place """ + + xx, yy = self.latlon2xy(dec, ra) + print(f'drawing oval {ra} {dec} at {xx} {yy} {self.width} {self.height}') + self.canvas.create_oval( + xx-size, + yy-size, + xx+size, yy+size, fill=fill) + + return xx, yy + + + def latlon2xy(self, lat, lon): + """ Convert lat lon to yard coordinates """ + if lon < 0: + lon += 360. + + xscale = 360.0 / self.width + yscale = 180.0 / self.height + + xx = int(lon / xscale) + yy = int((90 + lat) / yscale) + + return xx, yy + + def gamma_hack(): T = 1000 @@ -207,7 +251,7 @@ def argument_parser(parser=None): def get_body(body, t=None): - t = t or datetime.datetime.now() + t = t or dt.now() return coordinates.get_body(body, Time(t)) @@ -313,11 +357,14 @@ def __init__(self, name, t, size=None): self.name = name bd = body_data(name, t) self.body = bd['body'] + self.inc = 3600 * 24 super().__init__(size=size, t=t.timestamp(), m=bd['m'], r=bd['r']) def tick(self): + self.t += self.inc + self.body = get_body(self.name, dt.fromtimestamp(self.t)) return self def separation(self, body): @@ -333,6 +380,34 @@ def args_to_spheres(args, t): return spheres +def dump(spheres): + + for a in spheres: + + for b in spheres: + if a is b: continue + xx = b.body + yy = xx.transform_to(a.body) + print(f'{a.name} {b.name} {xx.ra.value - yy.ra.value} {xx.dec.value - yy.dec.value}') + print(f'zzzzzzz {a.name} {b.name} {yy.ra.value} {yy.dec.value}') + print + +def sun(t=None): + + return get_body('sun', t) + +def moon(t=None): + + return get_body('moon', t) + +def earth(t=None): + + return get_body('earth', t) + +def jupiter(t=None): + + return get_body('jupiter', t) + def main(): parser = argument_parser(cpr.argument_parser()) @@ -354,6 +429,8 @@ def main(): # pass list of balls into NestedWaves spheres = args_to_spheres(args, t) + + dump(spheres) farm = pigfarm.sty(SolarSystem, dict(balls=spheres, fade=args.fade, twist=args.twist)) From ef04f73eb2dd2ddd5aac32c81724840d254ab66e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 18 Nov 2018 20:34:03 -0500 Subject: [PATCH 486/642] more planet fun and a play option idea --- karmapi/cpr.py | 18 ++++++++++++++---- karmapi/grb.py | 12 ++++++++---- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 99655b6..9fa9dc9 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -648,7 +648,7 @@ class NestedWaves(pigfarm.Yard): and draw slices on the canvas from the yard. """ - def __init__(self, parent, balls=None, fade=1, twist=True): + def __init__(self, parent, balls=None, fade=1, twist=True, play=''): """ Initialise the thing """ super().__init__(parent) @@ -660,6 +660,7 @@ def __init__(self, parent, balls=None, fade=1, twist=True): self.view = 0 self.fade = fade self.twist = twist + self.play = play self.build(balls) self.add_event_map(' ', self.pause) @@ -876,6 +877,11 @@ async def run(self): spheres = await self.start_balls_running() + print(f'PLAYYYYY TIME *{self.play}*') + for x in self.play: + await self.farm.event.put(x) + self.play = '' + print('NESTED WAVES RUNNING') while True: try: @@ -1109,6 +1115,8 @@ def argument_parser(parser=None): choices=['random', 'zero', 'none'], default='zero') + parser.add_argument('--play', default='') + return parser def random_prime_balls(nmin, nmax): @@ -1150,9 +1158,11 @@ def main(): # pass list of balls into NestedWaves spheres = args_to_spheres(args) - farm = pigfarm.sty(NestedWaves, dict(balls=spheres, fade=args.fade, - twist=args.twist)) - + farm = pigfarm.sty(NestedWaves, dict( + balls=spheres, fade=args.fade, + twist=args.twist, + play=args.play)) + curio.run(farm.run, with_monitor=True) diff --git a/karmapi/grb.py b/karmapi/grb.py index 0dcce8e..0009234 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -137,6 +137,7 @@ class SolarSystem(cpr.NestedWaves): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + self.sleep = 2 def draw(self): """ Draw the balls """ @@ -146,16 +147,17 @@ def draw(self): cv = self.canvas cv.create_text( (self.width/2, 50), - text=ball.name, + text=ball.name + f'\n{dt.fromtimestamp(ball.t)}', fill='skyblue', font=pigfarm.BIGLY_FONT) for body in self.balls: body.tick() - if body is ball: - continue + #if body is ball: + # continue name = body.name where = body.body.transform_to(ball.body) + where = body.body #print(name, where) print(name.upper(), where.ra, where.dec) print(name, @@ -188,6 +190,8 @@ def latlon2xy(self, lat, lon): """ Convert lat lon to yard coordinates """ if lon < 0: lon += 360. + lon += 180 + lon %= 360 xscale = 360.0 / self.width yscale = 180.0 / self.height @@ -357,7 +361,7 @@ def __init__(self, name, t, size=None): self.name = name bd = body_data(name, t) self.body = bd['body'] - self.inc = 3600 * 24 + self.inc = 3600 * 6 super().__init__(size=size, t=t.timestamp(), m=bd['m'], r=bd['r']) From 6881b9ee672874a2e438db9ec54ea01db822cfb1 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 19 Nov 2018 14:02:06 -0500 Subject: [PATCH 487/642] general breakage in the house --- karmapi/cpr.py | 28 +++++++++++++++------------- karmapi/grb.py | 18 +++++++++++++----- karmapi/pigfarm.py | 13 ++++++++++++- 3 files changed, 40 insertions(+), 19 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 9fa9dc9..c222e52 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -193,6 +193,8 @@ def __init__(self, size=None, self.t = t + self.paused = False + # Default for mass?? if mu and m: m = gauss(m, mu) @@ -224,6 +226,10 @@ def reset(self, init=False): return + async def pause(self): + + self.paused = not self.paused + async def more_sleepy(self): """ Make the ball sleep more """ self.sleep *= 2 @@ -359,10 +365,11 @@ async def run(self): """ while True: - ball = await curio.run_in_process(self.tick) - #print(f'{self} sleep:{self.sleep}') + if not self.paused: + ball = await curio.run_in_process(self.tick) + #print(f'{self} sleep:{self.sleep}') - self.update(ball) + self.update(ball) #ball = await tick.join() #print('joined', ball, self.sleep) @@ -648,7 +655,7 @@ class NestedWaves(pigfarm.Yard): and draw slices on the canvas from the yard. """ - def __init__(self, parent, balls=None, fade=1, twist=True, play=''): + def __init__(self, parent, balls=None, fade=1, twist=True): """ Initialise the thing """ super().__init__(parent) @@ -660,7 +667,6 @@ def __init__(self, parent, balls=None, fade=1, twist=True, play=''): self.view = 0 self.fade = fade self.twist = twist - self.play = play self.build(balls) self.add_event_map(' ', self.pause) @@ -724,6 +730,8 @@ async def toggle_twist(self): async def pause(self): """ Pause """ self.paused = not self.paused + for ball in self.balls: + await ball.pause() async def reset(self): """ Reset waves """ @@ -877,11 +885,6 @@ async def run(self): spheres = await self.start_balls_running() - print(f'PLAYYYYY TIME *{self.play}*') - for x in self.play: - await self.farm.event.put(x) - self.play = '' - print('NESTED WAVES RUNNING') while True: try: @@ -1160,9 +1163,8 @@ def main(): farm = pigfarm.sty(NestedWaves, dict( balls=spheres, fade=args.fade, - twist=args.twist, - play=args.play)) - + twist=args.twist), play=args.play) + curio.run(farm.run, with_monitor=True) diff --git a/karmapi/grb.py b/karmapi/grb.py index 0009234..9228952 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -152,11 +152,12 @@ def draw(self): font=pigfarm.BIGLY_FONT) for body in self.balls: - body.tick() + #body.tick() + #if body is ball: # continue name = body.name - where = body.body.transform_to(ball.body) + #where = body.body.transform_to(ball.body) where = body.body #print(name, where) print(name.upper(), where.ra, where.dec) @@ -282,7 +283,7 @@ def get_mass(body): sun = masses['jupiter'] * (constants.GM_sun / constants.GM_jup) masses['sun'] = sun - return masses.get(body) + return masses.get(body, 1.) BODIES = [ @@ -291,6 +292,7 @@ def get_mass(body): 'earth', 'mars', 'jupiter', 'saturn', 'neptune', 'uranus'] +BODIES = coordinates.solar_system_ephemeris.bodies RADIUS_OF_EARTH = 6378. RADIUS_OF_SUN = 1.391e6 @@ -368,9 +370,14 @@ def __init__(self, name, t, size=None): def tick(self): self.t += self.inc - self.body = get_body(self.name, dt.fromtimestamp(self.t)) return self + def update(self, ball): + + super().update(ball) + + self.body = get_body(self.name, dt.fromtimestamp(self.t)) + def separation(self, body): """ Return distance to body """ return self.body.separation_3d(body) @@ -437,7 +444,8 @@ def main(): dump(spheres) farm = pigfarm.sty(SolarSystem, dict(balls=spheres, fade=args.fade, - twist=args.twist)) + twist=args.twist), + play=args.play) curio.run(farm.run, with_monitor=True) diff --git a/karmapi/pigfarm.py b/karmapi/pigfarm.py index 819509f..2ea027f 100644 --- a/karmapi/pigfarm.py +++ b/karmapi/pigfarm.py @@ -37,6 +37,7 @@ class PigFarm: def __init__(self, meta=None, events=None): self.event = curio.UniversalQueue() + self.play = '' self.piglet_event = curio.UniversalQueue() @@ -235,6 +236,15 @@ async def tend(self): async def run(self): self.quit_event = curio.Event() + + print(f'PLAYYYYY TIME *{self.play}*') + for x in self.play: + await self.event.put(x) + + #print(f'playing {x] qsize {self.event.qsize}') + print(f'{x} xxxx') + + self.play = '' runner = await spawn(self.tend()) @@ -295,9 +305,10 @@ async def show_eric(self): #farm.toplevel().withdraw() -def sty(clazz=None, parms={}): +def sty(clazz=None, parms={}, play=''): farm = PigFarm() + farm.play = play from karmapi.mclock2 import GuidoClock From 4ae9910bb8206a230a376fe59526d0127c4ed268 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 19 Nov 2018 15:58:52 -0500 Subject: [PATCH 488/642] add astropy to requirements --- requirements.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/requirements.txt b/requirements.txt index 8ad2573..f489ca8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,8 @@ #jupyter for added goodness +astropy # so we can find jupiter and more + + matplotlib # jupyter should provide this.. maybe it doesn't pandas # this might provide matplotib #pyaudio # for sound From e18f3174ed746c986591db706d27f0e3ecc3d386 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 19 Nov 2018 16:51:09 -0500 Subject: [PATCH 489/642] gamma ray burst 170817A --- karmapi/grb.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/karmapi/grb.py b/karmapi/grb.py index 9228952..c7b9a72 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -251,6 +251,8 @@ def argument_parser(parser=None): parser.add_argument('--date', default='2015/09/14/09/50/45') + parser.add_argument('--grb', default='170817A') + return parser @@ -389,6 +391,17 @@ def args_to_spheres(args, t): for body in BODIES: spheres.append(Body(body, t=t)) + grb = {} + grb['170817A'] = (176.8, -39.8) # RA DEC + + if args.grb in grb: + ra, dec = grb.get(args.grb) + + gbod = Body('sun', t=t) + gbod.body = coordinates.SkyCoord(ra, dec, unit='deg') + gbod.name = args.grb + spheres.append(gbod) + return spheres def dump(spheres): From f0e99010a20013bb9d3b2bc6a48e56276aa00096 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 20 Nov 2018 13:37:39 -0500 Subject: [PATCH 490/642] fun and features in grb solar land --- karmapi/grb.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/karmapi/grb.py b/karmapi/grb.py index c7b9a72..fe2c789 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -139,6 +139,14 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.sleep = 2 + self.add_event_map('r', self.reverse) + + async def reverse(self): + """ Rongo Rongo change direction """ + self.paused = False + for ball in self.balls: + ball.inc *= -1 + def draw(self): """ Draw the balls """ ball = self.balls[self.dball] @@ -157,7 +165,7 @@ def draw(self): #if body is ball: # continue name = body.name - #where = body.body.transform_to(ball.body) + wheret = body.body.transform_to(ball.body) where = body.body #print(name, where) print(name.upper(), where.ra, where.dec) @@ -171,6 +179,14 @@ def draw(self): text=name, fill='cyan') + xx, yy = self.draw_ball( + wheret.dec.value, wheret.ra.value, + fill='red') + cv.create_text( + (xx - 30, yy + 20), + text=name, fill='magenta') + + print() def draw_ball(self, dec, ra, fill='yellow', size=10, @@ -249,7 +265,9 @@ def argument_parser(parser=None): parser.add_argument('--lon', type=float, default=LIGO_HLON) - parser.add_argument('--date', default='2015/09/14/09/50/45') + #parser.add_argument('--date', default='2015/09/14/09/50/45') + #parser.add_argument('--date', default='2017/08/14') + parser.add_argument('--date', default='2017/08/17') parser.add_argument('--grb', default='170817A') From 3c3bb3f86773845aa734d3b30d18358a4bc190c7 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 20 Nov 2018 16:23:20 -0500 Subject: [PATCH 491/642] bump version --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index bc9a91e..78e8503 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from codecs import open from os import path -__version__ = '1.0314151' +__version__ = '1.0314159' here = path.abspath(path.dirname(__file__)) From 4a98bd58c679383b99462389c09c59d4d2186e03 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 21 Nov 2018 16:15:06 -0500 Subject: [PATCH 492/642] add a cpr nested waves to grb --- karmapi/grb.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/karmapi/grb.py b/karmapi/grb.py index fe2c789..1f295a5 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -478,6 +478,12 @@ def main(): twist=args.twist), play=args.play) + spheres = cpr.args_to_spheres(args) + farm.add(cpr.NestedWaves, dict( + balls=spheres, fade=args.fade, + twist=args.twist)) + + curio.run(farm.run, with_monitor=True) From aa4a81d9c5c7c4b91cfdc9547037983f712d84ff Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 21 Nov 2018 16:16:47 -0500 Subject: [PATCH 493/642] bump version for latest fix --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 78e8503..dd2bf90 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from codecs import open from os import path -__version__ = '1.0314159' +__version__ = '1.03141592' here = path.abspath(path.dirname(__file__)) From a249178d8186677d658d0574c149a78a3fc00fd9 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 23 Nov 2018 15:27:21 -0500 Subject: [PATCH 494/642] old tk backend buglet --- karmapi/backends/tkpig.py | 2 +- karmapi/kiss.py | 20 ++++++++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/karmapi/backends/tkpig.py b/karmapi/backends/tkpig.py index 389ed65..55b734d 100644 --- a/karmapi/backends/tkpig.py +++ b/karmapi/backends/tkpig.py @@ -539,7 +539,7 @@ async def naptime(self, naptime=None): """ if naptime is None: - nap = 0.05 + naptime = 0.05 return naptime diff --git a/karmapi/kiss.py b/karmapi/kiss.py index 8e10b6f..1f5539f 100644 --- a/karmapi/kiss.py +++ b/karmapi/kiss.py @@ -11,9 +11,8 @@ """ from karmapi import checksum, base -from curio import UniversalQuee +from curio import run, tcp_server -history = UniversalQuee async def goodbye(data, **meta) """ kiss good-bye to data """ @@ -39,3 +38,20 @@ async def goodbye(data, **meta) hello = goodbye + + + +async def echo_client(client, addr): + print('Connection from', addr) + s = client.as_stream() + async for line in s: + await s.write(line) + print('Connection closed') + await s.close() + + +if __name__ == '__main__': + try: + run(tcp_server, '', 25000, echo_client) + except KeyboardInterrupt: + pass From 3270985f03c8e3234704b54f68168bea490cb5b6 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 27 Nov 2018 13:21:05 -0500 Subject: [PATCH 495/642] v eyes work in progress on dedupe option --- karmapi/tankrain.py | 6 ++++-- karmapi/veyes.py | 31 ++++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index 8fb8d61..89165a3 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -55,9 +55,10 @@ class TankRain(pigfarm.Yard): """ Widget to show tankrain images """ def __init__(self, parent, path=None, version='local', date=None, - save=None, *args): + save=None, dedupe=0, *args): self.version = version + self.dedupe = dedupe self.paused = False self.path = path or '.' self.save_folder = save @@ -484,6 +485,7 @@ def main(args=None): help='folder to save to') parser.add_argument('--date') + parser.add_argument('--dedupe', type=int, default=0) args = parser.parse_args() @@ -494,7 +496,7 @@ def main(args=None): farm.add( TankRain, dict(path=args.path, version=args.version, date=args.date, - save=args.save)) + save=args.save, dedupe=args.dedupe)) from karmapi.mclock2 import GuidoClock farm.add(GuidoClock) diff --git a/karmapi/veyes.py b/karmapi/veyes.py index 1712fdf..27d997b 100644 --- a/karmapi/veyes.py +++ b/karmapi/veyes.py @@ -6,10 +6,15 @@ from pathlib import Path import random +from io import BytesIO + from picamera import PiCamera import time import curio +from PIL import Image + + from fractions import Fraction @@ -48,6 +53,19 @@ def random_picture(cam): return cam +def as_pil(camera) + """ Capture an image and return as PIL.Image """ + # Create the in-memory stream + stream = BytesIO() + camera.capture(stream, format='rgb') + + # "Rewind" the stream to the beginning so we can read its content + stream.seek(0) + image = Image.open(stream) + + return image + + async def capture(args): if args.long: @@ -56,6 +74,9 @@ async def capture(args): camera = PiCamera() camera.start_preview() + curio.sleep(2) + + last = None while True: now = datetime.datetime.now() @@ -64,9 +85,17 @@ async def capture(args): path = path / f'{now.hour:02}{now.minute:02}{now.second:02}.jpg' print(path) - camera.capture(str(path)) + #camera.capture(str(path)) + image = as_pil(camera) await curio.sleep(args.sleep) + if self.dedupe: + # Compare image to last and save if it is different enough + pass + + # save the image + image.save(path) + if args.random: camera = random_picture(camera) From 7eacfe31d2e4e0880dc979f230c31da22fc63500 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 2 Dec 2018 14:17:42 -0500 Subject: [PATCH 496/642] kiss checksum thought in progress --- karmapi/checksum.py | 4 ++++ karmapi/kiss.py | 52 +++++++++++++++++++++++++++++++++++++++------ 2 files changed, 49 insertions(+), 7 deletions(-) diff --git a/karmapi/checksum.py b/karmapi/checksum.py index 68594ea..795a115 100644 --- a/karmapi/checksum.py +++ b/karmapi/checksum.py @@ -208,3 +208,7 @@ def main(args=None): meta = dict(path=apath, timestamp=timestamp.isoformat()) base.save_meta(cpath.parent, meta) + +if __name__ == '__main__': + + main() diff --git a/karmapi/kiss.py b/karmapi/kiss.py index 1f5539f..12064af 100644 --- a/karmapi/kiss.py +++ b/karmapi/kiss.py @@ -9,12 +9,15 @@ share """ +import argparse + from karmapi import checksum, base from curio import run, tcp_server +PORT = 8008 -async def goodbye(data, **meta) +async def goodbye(data, **meta): """ kiss good-bye to data """ ck = checksum.checksum(data) @@ -39,8 +42,6 @@ async def goodbye(data, **meta) hello = goodbye - - async def echo_client(client, addr): print('Connection from', addr) s = client.as_stream() @@ -50,8 +51,45 @@ async def echo_client(client, addr): await s.close() +async def client(host, port): + sock = await curio.open_connection( + host, port) + async with sock: + await sock.sendall(b'kiss\r\nWOW HERE I AM\r\n\r\n') + chunks = [] + while True: + chunk = await sock.recv(10000) + if not chunk: + break + chunks.append(chunk) + + response = b''.join(chunks) + print(response.decode('latin-1')) + + + +def get_parser(): + + parser = argparse.ArgumentParser() + parser.add_argument('--host', default='localhost') + parser.add_argument('--port', type=int, default=PORT) + parser.add_argument('--serve', action='store_true') + + return parser + + if __name__ == '__main__': - try: - run(tcp_server, '', 25000, echo_client) - except KeyboardInterrupt: - pass + + parser = get_parser() + + args = parser.parse_args() + + if args.serve: + try: + run(tcp_server, args.host, args.port, echo_client) + except KeyboardInterrupt: + pass + + else: + # client mode + run(client, args.host, args.port) From 4f4d3f767a324d68fdd1b798917af16647a90c7f Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 12 Dec 2018 20:33:29 -0500 Subject: [PATCH 497/642] karma kiss protocol has heart beat --- karmapi/kiss.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/karmapi/kiss.py b/karmapi/kiss.py index 12064af..155d860 100644 --- a/karmapi/kiss.py +++ b/karmapi/kiss.py @@ -13,7 +13,7 @@ from karmapi import checksum, base -from curio import run, tcp_server +from curio import run, tcp_server, open_connection PORT = 8008 @@ -46,13 +46,14 @@ async def echo_client(client, addr): print('Connection from', addr) s = client.as_stream() async for line in s: + print(line) await s.write(line) print('Connection closed') await s.close() async def client(host, port): - sock = await curio.open_connection( + sock = await open_connection( host, port) async with sock: await sock.sendall(b'kiss\r\nWOW HERE I AM\r\n\r\n') From 510558eb384d33a24752f67e19ebeebbebe8f765 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 12 Dec 2018 20:55:14 -0500 Subject: [PATCH 498/642] karma kiss path simplification --- karmapi/kiss.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/karmapi/kiss.py b/karmapi/kiss.py index 155d860..6178299 100644 --- a/karmapi/kiss.py +++ b/karmapi/kiss.py @@ -11,7 +11,9 @@ """ import argparse -from karmapi import checksum, base +from karmapi import checksum + +from pathlib import Path from curio import run, tcp_server, open_connection @@ -24,7 +26,7 @@ async def goodbye(data, **meta): # check meta data etc -- see checksum module - path = meta.getdefault('path', base.Path('.')) + path = meta.getdefault('path', Path('.')) # any matches? Somebody else's problem? # run delta for each match? From bf7ffdbbfcbc95d87c727a8f5133d9130e4e720f Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 12 Dec 2018 21:05:31 -0500 Subject: [PATCH 499/642] require older 2.1 matplotlib :( --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index f489ca8..eec8a30 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,7 +3,7 @@ astropy # so we can find jupiter and more -matplotlib # jupyter should provide this.. maybe it doesn't +matplotlib==2.1 # jupyter should provide this.. maybe it doesn't pandas # this might provide matplotib #pyaudio # for sound curio # for async magic From aff977445ad34b467924d69dab8e83a6a8a27413 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 13 Dec 2018 15:59:24 -0500 Subject: [PATCH 500/642] of all the things they say what fred knew --- docs/nodice/fred.rst | 60 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/docs/nodice/fred.rst b/docs/nodice/fred.rst index e4064ad..f569699 100644 --- a/docs/nodice/fred.rst +++ b/docs/nodice/fred.rst @@ -48,7 +48,7 @@ better. It has been fascinating to wind back a lifetime, to a book published before I was born. -It is a stunning account of how the nature of the universe. +It is a stunning account of how the nature of the universe came to be. There are just 5 chapters, around 20 pages each. @@ -58,7 +58,7 @@ Earth and nearby space The Sun and the stars ===================== -How are star works. +How a star works. and its relation to the hydrogen bomb. @@ -87,6 +87,18 @@ nothing in his arguments involved a big bang. Rather, he sets the scene with clouds of hydrogen soup. +Reading a year on, I am struck with the sense that Fred very much felt +the expanding, continuous creation universe was the simplest +explanation of the observations. + +In particular, he had a fine sense of the potential ages of the +objects, distant spiral galaxies, that he was seeing through the great +telescopes. + +He talks of 500 billion years for a galaxy to drift from us to the +edge of the visible universe. + + A Personal view of all the things they say ========================================== @@ -106,9 +118,53 @@ And LIGO detectors that show gravitational waves exist. Black holes colide and out go the waves. +Reading Fred's personal view, he gives his view on afterlife, deeming +that if it were possible to reconstruct the brain, then in that sense +you live on. + +The words he wrote do not reconstruct the mind, but they give great +insight into his nuanced view on the fabulous universe as it came into +view. + Gravitational waves ------------------- +And Gamma Ray Bursts. + +I have just re-read Fred's book. With new perspective through a year +of Colin Rourke's new paradigm for cosmology. + +It is clear reading *The Nature of the Universe* that black holes were +very new on the scene. There is no indication he was aware that the +centre of our galaxy could have a black hole of mass 100 billion suns. + +We have more data from LIGO detectors, there are now eleven +observations. They are categorised into black-hole/black-hole +collisions and black-hole/neutron star. + +They also split into confirmed and tentative. + +There is one observation that was seen by 3 separate detectors and the +ellipse of uncertainty in the location of the source is pretty small. + +There seem to be a number of observations (3-4?) around August 2017, +when there were 2 or 3 detectors operational much of the time. + +More to come when I have looked at the data. + +Gamma Ray Bursts +---------------- + +In the new paradigm a model is proposed whereby gamma-ray bursts (GRB) +are explained as optical illusions as a galaxy enters our visible +universe. + +It seems to me that the gravitational wave generated by such a galaxy +will also propogage along similar geodesics to the light and be +modulated in a similar manner. + +Given the distances involved, this wave presumably is also modulated +by the sparse, but uniform, inter-stellar matter. Expansion and big bangs From 92964ee248bb5b378b9027d91d25518c917c6262 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 13 Dec 2018 16:22:59 -0500 Subject: [PATCH 501/642] thanks muchly, gravitational waves as json :) --- karmapi/grb.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/karmapi/grb.py b/karmapi/grb.py index 1f295a5..6641a82 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -119,6 +119,10 @@ from karmapi import base, cpr, pigfarm + +# Much thanks for all involved in this: +OBSERVATIONS = 'https://www.gw-openscience.org/catalog/GWTC-1-confident/json/' + def angle(d, m, s): a = s From dc1823c6ccca58be9f6fe90edecf326b5cf61c6d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 14 Dec 2018 19:17:39 -0500 Subject: [PATCH 502/642] waves gamma and gravity --- karmapi/grb.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/karmapi/grb.py b/karmapi/grb.py index 6641a82..348d931 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -107,6 +107,9 @@ import math import numpy as np import argparse +import requests +import json +from pathlib import Path from datetime import datetime as dt @@ -123,6 +126,13 @@ # Much thanks for all involved in this: OBSERVATIONS = 'https://www.gw-openscience.org/catalog/GWTC-1-confident/json/' +GRB_20170818_0224 = """ + +J1243.9-1135 07012051001 12 43 51.26 -11 35 06.28 Aug 18, 2017 02:22:00 Aug 28, 2017 120.341 119.873 128 Aug 29, 2017 +J1245.4-1154 07012052001 12 45 22.41 -11 54 01.4 Aug 18, 2017 02:25:00 Aug 28, 2017 123.173 122.995 130 Aug 29, 2017 +J1246.9-1213 07012053001 12 46 53.91 -12 12 34.99 Aug 18, 2017 02:27:00 Aug 28, 2017 122.849 120.104 128 +""" + def angle(d, m, s): a = s @@ -454,6 +464,24 @@ def jupiter(t=None): return get_body('jupiter', t) + +def get_waves(path=None): + + if path.exists(): + with path.open() as infile: + return json.load(infile) + + resp = requests.get(OBSERVATIONS) + + data = json.loads(resp.content.decode('utf-8')) + print(type(data)) + + if path is not None: + with path.open('w') as outfile: + json.dump(data, outfile, indent=True) + + return data + def main(): parser = argument_parser(cpr.argument_parser()) @@ -494,5 +522,20 @@ def main(): if __name__ == '__main__': + waves = get_waves(Path('./gw.json')) + + data = waves['data'] + + print(json.dumps(waves['parameters'], indent=True)) + + for name, fields in data.items(): + print() + print(name) + for k, v in fields.items(): + print(k, v['best']) + + + + 1/0 main() From 9ae6d55bba17c834ae2ac0cb5fc6529658141bd7 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 16 Dec 2018 14:15:35 -0500 Subject: [PATCH 503/642] exploring gw data with python3.6 -i and grb --- karmapi/grb.py | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/karmapi/grb.py b/karmapi/grb.py index 348d931..87f20ec 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -527,15 +527,31 @@ def main(): data = waves['data'] print(json.dumps(waves['parameters'], indent=True)) - + + rows = [] for name, fields in data.items(): print() print(name) - for k, v in fields.items(): - print(k, v['best']) + row = dict(name=name) + + #fields['name'] = name + + #for k, v in fields.items(): + # print(k, v['best']) + for k, v in fields.items(): + row[k] = v.setdefault('best') + print(f"{v['best']}", end=', ') + print() + + rows.append(row) + + import pandas + + df = pandas.DataFrame(rows) + print(df.describe()) - 1/0 - main() + #1/0 + #main() From 5b8c0c4054501e2bbd20db90e8bba9df5c3896ee Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 17 Dec 2018 12:26:05 -0500 Subject: [PATCH 504/642] pi is transendental and an ocean of dolphins --- docs/nodice/pist.rst | 48 +++++++++++++++++++++++++++++++++++++++++ docs/philosophy.rst | 51 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 docs/nodice/pist.rst create mode 100644 docs/philosophy.rst diff --git a/docs/nodice/pist.rst b/docs/nodice/pist.rst new file mode 100644 index 0000000..404dd9d --- /dev/null +++ b/docs/nodice/pist.rst @@ -0,0 +1,48 @@ +====================== + Pi Is Transcendental +====================== + +Snowy the cat, brought us Pi-Ri, + +Pi-Ri the pirate cat. + +Over the sea to a land of ice. + +Pi-ri the cat, divide by three, + +Point 1, 4, 2 + +'Cos pi is transcendental. + +For just one quarter of a pie, + +Here's a simple recipe. + +Start with 1, that's Napoleon's pi + +Take off 1 part in three. + +And now add back in just one in five. + +'Cos pi is transendental + +Take back out a one in seven + +And now back in just one in nine + +That's one in three of the one in three we took, + +So let's start with one, and add another two. + +Then split the three to two and one + +Rinse repeat times five. + +Now take the five and find just 3 to add back into the pie. + +No all gather round, and make a circle, + +It never ends, goes on and on, + +'Cos pi is transendental. + diff --git a/docs/philosophy.rst b/docs/philosophy.rst new file mode 100644 index 0000000..a38757f --- /dev/null +++ b/docs/philosophy.rst @@ -0,0 +1,51 @@ +============ + Philosophy +============ + +There are a lot of questions in karma pi land. + +Not so many answers, but some hints at experiments that could help give +better insights. + +It is a land of doubt and much mystery. + + +On the software side there is exploration of ideas to help share data, +resources and ideas. + +How to do this balancing privacy against benefits of open sharing? + +How to better understand how much we are sharing and with who? + +Karma Pi makes no attempt to be secure. Rather, it is assumed +processes anywhere on the local network are acting in good faith, and +in so doing make better use of the available resources. + +So for instance, a classroom working with raspberry pi's. Maybe +trying to make a weather forecast, but the pieces of the puzzle are +spread across the space. Forage for clues and other's with answers to +questions you had not even thought to ask? Someone who has been +watching the snow, rain and ice each day, the height of the tide or +the phase of the moon? + +The *karmapi.kiss* module is a simple start to sharing data across +pi's. + +And there is *yosser* if you want to share in the work. + +But there is also this, I learned today, thanks to Peter Wang, and no +doubt many others:: + + https://docs.oceanprotocol.com/ + +**Blockchain** too, in this case addressing data integrity and +security too. + +Trying not to re-invent wheels, finding others that are solving the +same problems and working together was always a goal. + +So *karmapi.kiss* or time to explore the **ocean**? + +*Ocean Protocol* logo appears to be a dolphin, so I guess ocean it is. + +Maybe with karma pi for the kissing dolphins? From 947b9156060fe3cbfc3b6faf079cb44f202a1554 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 8 Jan 2019 16:10:23 -0500 Subject: [PATCH 505/642] inertia with inertia ideas white noise from snowy --- docs/nodice/inertia.rst | 247 ++++++++++++++++++++++++++++++++++++++-- karmapi/grb.py | 4 +- 2 files changed, 239 insertions(+), 12 deletions(-) diff --git a/docs/nodice/inertia.rst b/docs/nodice/inertia.rst index a12120c..e9f97a4 100644 --- a/docs/nodice/inertia.rst +++ b/docs/nodice/inertia.rst @@ -1,16 +1,243 @@ -==================== - Inertia in science -==================== +========= + Inertia +========= -Structure of academia means body of evidence required to question -widely accepted, but mistaken ideas is enormous. +When I started this story I was thinking about all sorts of inertia in +society. -cf excel inertia. +It usually begins with a quantum leap, a new perspective on an old +idea? -human achievement. +Things that once took months or years now could be done in a day. -Age of the universe +Spreadsheets were a revelation to many and made it easy to find new +in-sights. -Drake's equation, Fermi paradox. +The tools helped you learn what could be done. -Intelligent life in the universe. +All around others were discovering other tools, new computer +languages, perl, php, python and parrot. + +Each making it orders of magnitude easier to get the task done, but +then an avalanche of new ideas as ridges are reached. + +A paradigm shift, climb up a higher mountain and see what could only +be dreamed of before. + +The new paradigm explains much, assumptions turn into facts, or rather +disappear from the discourse. + +Take, *The big bang theory*, the universe is expanding, it must have been tiny +once, not so very long ago. + +But what if our window on the universe is just that, a glimpse of +something larger, seen through the blur of the Hooke telescope +Monument? + +And expanding and contracting at one and the same? + +Now for some history of gravitational waves. + + +Michelsson-Morley experiment +============================ + +In 1887, Albert A. Michelson and Edward W. Morley conducted an +experiment in Cleveland, Ohio. + +The experiment took a beam of light, split it into perpendicular +directions and measure the difference in the speed of light in the two +directions. + +It was assumed there would be a difference, but there wasn't. + +The beam of light took the same time in both directions regardless how +the equipment was orientated. + +The apparatus was mounted on a slab of rock floating in a giant bath +of liquid mercury. + +It was this experiment's failure that eventually led to Einstein's +special relativity. + +LIGO +==== + +Fast-forward to today and we have a repeat of the Michelson-Morley +experiment, but on a giant scale. + +The *Laser Interferometer Gravitational-wave Observatory* is an +international collaboration centred around two giant experiments, with +vaccuum tubes arranged in an **L** with each arm 4km long. + +It has taken over 20 years to get it to the current sensitivity. + +It splits a beam of light and sends each part of the light on a 20km +journey, up and down the arms and measures the time difference of +arrival of the waves. + +On September 14th 2015 the observatory recorded a signal, the same +signal being observed at both observatories, with a 7ms delay. + +The time difference was following a smooth wave, that rose in +frequency, until it reached the limit of the equiment sensitivity +(10-500Hz range?). + +It had been speculated that black holes colliding with each other, +slowly spiralling into each other, with the spirals getting faster and +faster, until the holes merge into a single entity, would generate a +gravitational wave, in that it would send a ripple through space time, +that would cause a ripple in any light or matter passing that way. + +Simulations have been run and a number of software packages that will +take a waveform and try a range of parameters for the masses of the +two bodies colliding and finding the best match to the data. + +The software also gives an estimate of the distance based on the +intensity of the wave when received at LIGO compared to that at the +actual collision. + + + +Black holes colliding +===================== + + +*m_1* mass of larger object + + +*m_2* mass of smaller object + +*r* distance from observatory + +Events are assumed to be rare, hence none so far none have been near to home. + +When a detection is made the waveform is compared to a catalogue of +potential impacts and the closest match declared the answer. + +There are multiple software libraries involved, but broad agreement of +how these collisions behave. + +Some simplifying assumptions such as any rotation the two bodies have +are included. + +It is likely that the Kerr metric (I need to do some digging in the +software here) has been used. + +Alternatively, I can work from the parameters announced for each +collision, simulate what I think the wave should look like and compare +to the data. + +Regardless of which metric is actually in play we can proceed as +follows: + +1. Decide how we might expect (m_1, m_2, r) to be distributed. + +2. Take a sample from that distribution and use it to generate a + family of curves with your favourite model, *A*. + +3. Feed the curves to model B, and see if the distribution of *m_i* + and *r* are as expected. + +I am not sure how much difference the metric will make in this case, +but at least I can take a look and in the process get a better feel +for state of the art black hole collision ideas. + + +Neutron stars too +----------------- + +There have been detections thought to be due to a neutron star +colliding with a black hole, or possibly another neutron star. + + +Gamma ray bursts +================ + +For at least two of the observations a short duration gamma ray burst +was observed a couple of seconds after the gravitational wave passed. + +For one of the neutron star events, there were a lot of other +coincident observations: gamma ray bursts, xrays, visible light, +dropping in frequency and intensity over time. + +It is suggested that with a neutron star involved all sorts of +additional radiation could be expected. + + +Another Paradigm +================ + +Colin Rourke's *Another paradigm for the universe* suggests that +gamma-ray bursts may in fact an optical illusion, as we see the +*quasi-infinite* past of a universe just arriving in our visible +universe. + +It is all a result of the paths of the *geodesics* in the *de Sitter* +space used to model our part of the universe, our visible universe. + +This opens up the intriguing possibility, that a new arrival will also +be a strong source of gravitational waves. + +Since the gravitational field of a galaxy's central black hole extends +well beyond the visible universe, it is reasonable to assume that the +onset of the arrival of the gravitational wave will precede the +arrival of any light from the galaxy. + +Further, it should be noted that the gravitational wave also modulates +the light, as it is in essence, part of the carrier wave. + + +Why no gravitational waves for long duration gamma-ray bursts? +-------------------------------------------------------------- + +This is a puzzle for the time being. The current detectors have upper +and lower bound on the frequency that they can detect. + +I am also not sure how the waves get modulated when you take into +account the way the central black hole itself distorts space time. + +I believe *anoptu* discusses geodesics can follow a cusp-like path? + +This would allow lots of opportunity for modulation of the wave. + + +Personal View +============= + +What is not in doubt is what a remarkable international collaboration +the work to detect these gravitational waves. + +It is a truly stunning achievement. + +The interpretation that what we are seeing is actually caused by +distant collisions of black holes is open to question, although such +question should be supported by another explanation for the waves, +preferably one that is testable by experiment. + +Pending the arrival of more observations, it may be useful to run some +simulations to see in what ways the various models and assumptions +vary in terms of the observations we see. + +I believe that it will soon become clear whether there really is a +deficit of local events. This would likely be the first indication +that the current explanation is incorrect. + + +Virgo +===== + +More recently a third detector has become operational, based in Italy. + + +Spring 2019 +=========== + +Expecting lots of new data to come from the spring LIGO production runs. + + +References +========== + +For more details, https://wikipedia.org has been an invaluable +starting point. diff --git a/karmapi/grb.py b/karmapi/grb.py index 87f20ec..848dfd5 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -536,8 +536,8 @@ def main(): #fields['name'] = name - #for k, v in fields.items(): - # print(k, v['best']) + for k, v in fields.items(): + print(k, v['best']) for k, v in fields.items(): From 7d3c3f420542aa02d2507ae398b1d03dd5466443 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 14 Jan 2019 15:38:57 -0500 Subject: [PATCH 506/642] more inertia for inertia dot rest --- docs/nodice/inertia.rst | 100 +++++++++++++++++++++++++++++++++++++--- karmapi/grb.py | 2 +- 2 files changed, 94 insertions(+), 8 deletions(-) diff --git a/docs/nodice/inertia.rst b/docs/nodice/inertia.rst index e9f97a4..3da7c1b 100644 --- a/docs/nodice/inertia.rst +++ b/docs/nodice/inertia.rst @@ -143,12 +143,24 @@ I am not sure how much difference the metric will make in this case, but at least I can take a look and in the process get a better feel for state of the art black hole collision ideas. +Deciding how *m_1* and *m_2* might be distributed is likely biassed by +the model that is being used for the universe. + +Just what sized objects do we actually expect to spiral into each +other? + +Is it the case that some particular masses spiral more rapidly than +others which will very gently coalesce over time? + +How are the current models handling the influence of the black holes +on propogation of any gravitational wave that the collision emits? + Neutron stars too ----------------- There have been detections thought to be due to a neutron star -colliding with a black hole, or possibly another neutron star. +colliding with a black hole, or possibly another neutron star. Gamma ray bursts @@ -210,10 +222,15 @@ the work to detect these gravitational waves. It is a truly stunning achievement. -The interpretation that what we are seeing is actually caused by -distant collisions of black holes is open to question, although such -question should be supported by another explanation for the waves, -preferably one that is testable by experiment. +The LIGO (and Virgo) observatories are indeed detecting stunning +ripples in space time. + +The accepted interpretation is that the waves we are seeing are actually +caused by distant collisions of black holes. + +This is open to question, although such question should be supported +by another explanation for the waves, preferably one that is testable +by experiment. Pending the arrival of more observations, it may be useful to run some simulations to see in what ways the various models and assumptions @@ -223,7 +240,6 @@ I believe that it will soon become clear whether there really is a deficit of local events. This would likely be the first indication that the current explanation is incorrect. - Virgo ===== @@ -233,11 +249,81 @@ More recently a third detector has become operational, based in Italy. Spring 2019 =========== -Expecting lots of new data to come from the spring LIGO production runs. +Expecting lots of new data to come from the spring LIGO production +runs. + +With multiple detectors running there will also be better sky +localisation of the source of any waves. + +Foot note +========= + +I have been re-reading *Another Paradigm for the Universe*, particular +chapter two, which talks about inertial drag fields and develops a +model where the influence a distant mass has on the local inertial +frame is proportional to that mass and inversely proportional to its +*distance*. + +Or, to put another way, the effect of the gravitational wave drops off +linearly with distance. + +Now consider, a dumbel with the same mass at each end with a bar one +unit long separating the masses, rotating with some angular velocity, +$\omega$. + +Now imagine how this wave might sweep out to concentric circles of +diameter 2, 3, 4, 5,.. units away. + +Each band is just $\pi$ units longer than the previous band. + +Suppose there is a steady source of waves (a nearby rotating black +hole?). + + +As the wave radiates from the source, little energy is lost as the +wave moves out to wider and wider circles. Imagine the ripples on a +calm pond created by an apple dropping from a tree. + +Each band is just one wavelength longer than the previous so there is +just one extra wave to spread the energy across. + +With steady new waves being created at the central ring. + +So the energy at a distance n from the source wave is just 1 / n times +the energy in the inner band. + + +So the energy in the inner, unit circle spread out to a 2-unit +circle, the wave height halving. + +From 2 to 3 the energy for unit area drops to 2/3 of level 2. + +In general, going from level n to n + 1, the energy drops by +$n / (n + 1)$. + +Sum (n / (n + 1)) for i in 1, 2, 3, ...., n + References ========== +For Colin's work, I recommend his home page at Warwick University:: + + http://msp.warwick.ac.uk/~cpr + + + + https://arxiv.org/abs/astro-ph/0311033 + + +For data and information on gravitational waves, the Gravitational +Wave Open Science Centre is invaluable:: + + https://www.gw-openscience.org/ + + + + For more details, https://wikipedia.org has been an invaluable starting point. diff --git a/karmapi/grb.py b/karmapi/grb.py index 848dfd5..05fede3 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -553,5 +553,5 @@ def main(): print(df.describe()) #1/0 - #main() + main() From 2d030b3a299e7c2ddcc880e997c0591c5cbda286 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 16 Jan 2019 20:38:09 -0500 Subject: [PATCH 507/642] more inertia confusion --- docs/nodice/inertia.rst | 49 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/docs/nodice/inertia.rst b/docs/nodice/inertia.rst index 3da7c1b..febbd38 100644 --- a/docs/nodice/inertia.rst +++ b/docs/nodice/inertia.rst @@ -265,12 +265,22 @@ frame is proportional to that mass and inversely proportional to its *distance*. Or, to put another way, the effect of the gravitational wave drops off -linearly with distance. +linearly with distance. There is a lot in this chapter to support the +$1/r$ relationship. + +When I have read this before I was happy to take this as a given and +now I had to think why so? + +I had been thinking of concentric circles (slices along a great circle +through nested spheres), with the diameter of the n'th circle being +$n$. + Now consider, a dumbel with the same mass at each end with a bar one unit long separating the masses, rotating with some angular velocity, $\omega$. + Now imagine how this wave might sweep out to concentric circles of diameter 2, 3, 4, 5,.. units away. @@ -278,11 +288,13 @@ Each band is just $\pi$ units longer than the previous band. Suppose there is a steady source of waves (a nearby rotating black hole?). - - + + As the wave radiates from the source, little energy is lost as the -wave moves out to wider and wider circles. Imagine the ripples on a -calm pond created by an apple dropping from a tree. +wave moves out to wider and wider circles. Energy, in the form of +gravitational waves dissipates into the surrounding region, but each +shell of unit size contains the same energy. + Each band is just one wavelength longer than the previous so there is just one extra wave to spread the energy across. @@ -301,8 +313,33 @@ From 2 to 3 the energy for unit area drops to 2/3 of level 2. In general, going from level n to n + 1, the energy drops by $n / (n + 1)$. -Sum (n / (n + 1)) for i in 1, 2, 3, ...., n +Prod (i / (i + 1)) for i in 1, 2, 3, ...., n + +But isn't it just 1 / n? + +Forgot about time? + + +Or maybe +-------- + +Imagine the ripples on a calm pond created by an apple dropping from a +tree. Or rather a ripples created by the tip of a long branch, +dipping into a calm pond. You can gently rock the branch to create +waves. + + +Arrival of a new galaxy +======================= + +There is something rather elegant in the idea that when a new galaxy +enters our visible universe it greets us, at a respectful distance of +12 billion light years with an update on it's entire history prior to +this, or our last meeting if per chance we have met before. +This update could be viewed as an adjustment to our inertial frame to +represent the distant matter that is just now beginning to affect our +inertial frame. References From 3049bc0462b5c1612b55ab6923533b0a4bd87747 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 21 Jan 2019 10:57:07 -0500 Subject: [PATCH 508/642] pi is transcendental now --- docs/nodice/pist.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/nodice/pist.rst b/docs/nodice/pist.rst index 404dd9d..982d794 100644 --- a/docs/nodice/pist.rst +++ b/docs/nodice/pist.rst @@ -40,7 +40,7 @@ Rinse repeat times five. Now take the five and find just 3 to add back into the pie. -No all gather round, and make a circle, +Now all gather round, and make a circle, It never ends, goes on and on, From ace80af03b274ad4ac262046d76a302c39539fba Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 21 Jan 2019 15:37:00 -0500 Subject: [PATCH 509/642] inertia dot rst gaining momentum? --- docs/nodice/inertia.rst | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/docs/nodice/inertia.rst b/docs/nodice/inertia.rst index febbd38..988639a 100644 --- a/docs/nodice/inertia.rst +++ b/docs/nodice/inertia.rst @@ -275,6 +275,9 @@ I had been thinking of concentric circles (slices along a great circle through nested spheres), with the diameter of the n'th circle being $n$. +In short assuming the amplitude of the wave would drop from the n-th +to the (n+1)th circle by just enough to add an extra copy of the wave. + Now consider, a dumbel with the same mass at each end with a bar one unit long separating the masses, rotating with some angular velocity, @@ -284,7 +287,8 @@ $\omega$. Now imagine how this wave might sweep out to concentric circles of diameter 2, 3, 4, 5,.. units away. -Each band is just $\pi$ units longer than the previous band. +Each band is just $\pi$ units longer than the previous band. Rather +think of the wave itself spiralling outwards. Suppose there is a steady source of waves (a nearby rotating black hole?). @@ -311,23 +315,40 @@ circle, the wave height halving. From 2 to 3 the energy for unit area drops to 2/3 of level 2. In general, going from level n to n + 1, the energy drops by -$n / (n + 1)$. +$n / (n + 1)$. But now there are n+1 waves, so the total energy is preserved. Prod (i / (i + 1)) for i in 1, 2, 3, ...., n -But isn't it just 1 / n? +But isn't it just 1 / n? Yes, in the sense of n waves going round a +circle of length n, each with amplitude 1/n of the inner wave. + +Did I forget about time? + +If we get too close to the black hole we see the effects of general +relativity and things get complicated very quickly. + +Fortunately, we can set our unit of distance so that we start a +respectable distance from the centre of the black hole, where we can +assume that the gravitational waves are propogating at close to the +speed of light, relative to the black hole. + +Within a few radii, the effect will be negligible. + + -Forgot about time? Or maybe -------- -Imagine the ripples on a calm pond created by an apple dropping from a +Imagine the ripples on a calm lake created by an apple dropping from a tree. Or rather a ripples created by the tip of a long branch, dipping into a calm pond. You can gently rock the branch to create waves. +Swirl it round in a gentle circle and watch the waves move out across +the lake, a self-supporting spiral of waves. + Arrival of a new galaxy ======================= From 7e13f1722f88609761a2ba75aae91b455333bf4f Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 21 Jan 2019 18:05:34 -0500 Subject: [PATCH 510/642] murky inertial details --- docs/nodice/inertia.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/nodice/inertia.rst b/docs/nodice/inertia.rst index 988639a..470e691 100644 --- a/docs/nodice/inertia.rst +++ b/docs/nodice/inertia.rst @@ -237,8 +237,10 @@ simulations to see in what ways the various models and assumptions vary in terms of the observations we see. I believe that it will soon become clear whether there really is a -deficit of local events. This would likely be the first indication -that the current explanation is incorrect. +deficit of local events. This would likely be a first indication +that the current explanation is incorrect, although the picture may be +murky for a while longer. + Virgo ===== From c01c46585fd07d4746406fb6f320e68657ecca78 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 22 Jan 2019 18:58:12 -0500 Subject: [PATCH 511/642] inertia going round in ever increasing circles --- docs/nodice/inertia.rst | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/docs/nodice/inertia.rst b/docs/nodice/inertia.rst index 470e691..92ea7ef 100644 --- a/docs/nodice/inertia.rst +++ b/docs/nodice/inertia.rst @@ -273,30 +273,27 @@ $1/r$ relationship. When I have read this before I was happy to take this as a given and now I had to think why so? +At the centre of it all is the giant black hole. Matter, trapped in a +tiny vortex. It generates a gravitational wave, a repeating ripple in +space time that propogates in all directions. + I had been thinking of concentric circles (slices along a great circle through nested spheres), with the diameter of the n'th circle being -$n$. +$n$. As the circles get bigger, the amplitude gets smaller, but each +circle has just one more wave as it wraps around the central mass. + In short assuming the amplitude of the wave would drop from the n-th to the (n+1)th circle by just enough to add an extra copy of the wave. - -Now consider, a dumbel with the same mass at each end with a bar one -unit long separating the masses, rotating with some angular velocity, -$\omega$. - - Now imagine how this wave might sweep out to concentric circles of diameter 2, 3, 4, 5,.. units away. Each band is just $\pi$ units longer than the previous band. Rather think of the wave itself spiralling outwards. -Suppose there is a steady source of waves (a nearby rotating black -hole?). - -As the wave radiates from the source, little energy is lost as the +As the wave radiates from the source, no energy is lost as the wave moves out to wider and wider circles. Energy, in the form of gravitational waves dissipates into the surrounding region, but each shell of unit size contains the same energy. @@ -336,7 +333,17 @@ speed of light, relative to the black hole. Within a few radii, the effect will be negligible. +Caveat +------ + +Shouldn't we be looking at surfaces of nested spheres, rather than +great circle slices through them? +In that case the amplitude would drop in proportion to $1/r^2$, not +$1/r$. + +Yet the great circle argument feels sound. There are waves travelling +outward in every direction. @@ -352,6 +359,7 @@ Swirl it round in a gentle circle and watch the waves move out across the lake, a self-supporting spiral of waves. + Arrival of a new galaxy ======================= @@ -364,7 +372,6 @@ This update could be viewed as an adjustment to our inertial frame to represent the distant matter that is just now beginning to affect our inertial frame. - References ========== @@ -387,3 +394,9 @@ Wave Open Science Centre is invaluable:: For more details, https://wikipedia.org has been an invaluable starting point. + + +The binary black hole page has a good summary of the accepted physics +of binary black hole mergers:: + + https://en.wikipedia.org/wiki/Binary_black_hole From 1476e0801a6f5a3800abf5bd26be56fcb966c6bc Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 22 Jan 2019 20:17:47 -0500 Subject: [PATCH 512/642] collisions depend on the algorithm --- docs/nodice/inertia.rst | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/docs/nodice/inertia.rst b/docs/nodice/inertia.rst index 92ea7ef..8ef6740 100644 --- a/docs/nodice/inertia.rst +++ b/docs/nodice/inertia.rst @@ -80,7 +80,7 @@ On September 14th 2015 the observatory recorded a signal, the same signal being observed at both observatories, with a 7ms delay. The time difference was following a smooth wave, that rose in -frequency, until it reached the limit of the equiment sensitivity +frequency, until it reached the limit of the equipment sensitivity (10-500Hz range?). It had been speculated that black holes colliding with each other, @@ -241,12 +241,41 @@ deficit of local events. This would likely be a first indication that the current explanation is incorrect, although the picture may be murky for a while longer. +I am curious about just how frequent we can expect there to be +collisions of black holes in our universe, and the sort of sizes those +bodies might have. + +One potential source of black hole collisions are galaxies that are +colliding with each other. + +The universe appears to be generally expansive, so galaxy collisions +might be expected to be rare. + +Binary stars are another potential source, collapsing to black holes +which get too close and spiral into each other. + +Predicting how likely such events are and what sort of gravitational +waves may be generated when they occur, requires a good theory of +quantum gravity. + +Here *good* is in the sense that it approximates the actual physics +well enough to create credible simulations of the events. + Virgo ===== More recently a third detector has become operational, based in Italy. +Having a third detector allows for better location of the source of +the wave. + +There is also a network of other observatories that receive alerts +when there are significant gravitational wave events. + +The better location helps with searches for any coincident radiation +to be detected. + Spring 2019 =========== @@ -400,3 +429,4 @@ The binary black hole page has a good summary of the accepted physics of binary black hole mergers:: https://en.wikipedia.org/wiki/Binary_black_hole + From ec4b0160e68f9a71094536f19136280b6265ea76 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 24 Jan 2019 14:07:49 -0500 Subject: [PATCH 513/642] galaxy birthday puzzle gravity waves --- docs/nodice/inertia.rst | 85 +++++++++++++++++++++++++++++++++++------ 1 file changed, 74 insertions(+), 11 deletions(-) diff --git a/docs/nodice/inertia.rst b/docs/nodice/inertia.rst index 8ef6740..e9ce991 100644 --- a/docs/nodice/inertia.rst +++ b/docs/nodice/inertia.rst @@ -214,6 +214,53 @@ I believe *anoptu* discusses geodesics can follow a cusp-like path? This would allow lots of opportunity for modulation of the wave. +Arrival of a new galaxy +======================= + +There is something rather elegant in the idea that when a new galaxy +enters our visible universe it greets us, at a respectful distance of +12 billion light years with an update on it's entire history prior to +this, or our last meeting if per chance we have met before. + +This update could be viewed as an adjustment to our inertial frame to +represent the distant matter that is just now beginning to affect our +inertial frame. + +What might the gravitational wave from such an arrival look like? + +Let's begin with what an observer on earth sees when looking at a nearby +galaxy:: + + Let's assume 90% or so of the mass of a galaxy is concentrated in + the super massive black hole at it's centre, with a mass of some + 100's of billions of solar masses. + + Close to the black hole there is a distance where time is slowed so + much that waves get nearer and nearer to escaping but never quite + manage. + + Beyond this there is a region where waves progress at a small + fraction of the speed of light, until a respectful distance from the + central mass. + + Next we get to much of the remaining 10% of matter that is + essentially captured by the black hole and forming dynamic spirals + of stars, with matter also falling back and being constantly + recycled. + + And much further out, beyond the visible part of the universe the + inertial drag from the black hole will still have an effect. + +This allows us to get an idea what a new arrival in our visible +universe might look like. + +A high frequency wave rising in amplitude, but before it gets full +intensity it is joined by the wave being held back by the black hole +itself. + +Our observatories will see the interference pattern from these waves. + + Personal View ============= @@ -374,8 +421,6 @@ $1/r$. Yet the great circle argument feels sound. There are waves travelling outward in every direction. - - Or maybe -------- @@ -389,17 +434,35 @@ the lake, a self-supporting spiral of waves. -Arrival of a new galaxy -======================= +Addendum +-------- + + +In three space we really do have nested spheres and we might expect a +1/(r^2) relationship if the energy in the wave is preserved across the +surface of each nested sphere. + +Suppose we think of the energy as being the sum:: + + + $$\Sigma_i \omega_i * m_i + + +But we are dealing with waves and great circles that are close to each +other will vary smoothly. And across this surface we just need to +preserve the number of waves multiplied by the number of waves being +supported, which in any plane just has to increase as r increases, so +amplitude dropping as 1/r. + +Any obsemver is just a point on the surface of the sphere equidistant +from the body. Observers nearby will see a very similar picture, +since the wave is moving smoothly. + + +I think now is a good time for me to take another look at the spiral +code in the cpr.py module. -There is something rather elegant in the idea that when a new galaxy -enters our visible universe it greets us, at a respectful distance of -12 billion light years with an update on it's entire history prior to -this, or our last meeting if per chance we have met before. -This update could be viewed as an adjustment to our inertial frame to -represent the distant matter that is just now beginning to affect our -inertial frame. References ========== From c8a71cbdd90cc3ee3700ef675d8510368bf3a4a8 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 27 Jan 2019 19:49:42 -0500 Subject: [PATCH 514/642] not the epcycle of planetary motion? --- docs/nodice/etpm.rst | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 docs/nodice/etpm.rst diff --git a/docs/nodice/etpm.rst b/docs/nodice/etpm.rst new file mode 100644 index 0000000..bf6f78c --- /dev/null +++ b/docs/nodice/etpm.rst @@ -0,0 +1,36 @@ +=========================================== + an Epycycle Theory for Planetary Motions +=========================================== + +or not. + +corollaries to the new paradigm. + +ancient universe, but constant recycling of matter. + +de Sciama principle. + +symmetry: the sum of the bodies in my universe's influence on my inertial +frame is equal to my influence in return. + +distribution of galactic angular velocities? + + +Intro +===== + +A group of scientists have developed a simpler theory of the +universe. + +At the same time a global collaboration of scientists is collecting +extraordinary data on a whole spectrum of events. + +Somewhere along the line perhaps a wrong turn was made? + +Like a proof or a great hypothesis of old sucn as that of Fermat... + +But not a proof that can be patched, no matter how many patches are +applied? + +So let's wind back the clock and see where we might have gone astray? + From c0edb864e4ac262bf00ff86692f27c09a412dbda Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 27 Jan 2019 19:53:48 -0500 Subject: [PATCH 515/642] de Sitter and hyperbolic geodesics --- docs/nodice/etpm.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/nodice/etpm.rst b/docs/nodice/etpm.rst index bf6f78c..b961ff2 100644 --- a/docs/nodice/etpm.rst +++ b/docs/nodice/etpm.rst @@ -10,11 +10,16 @@ ancient universe, but constant recycling of matter. de Sciama principle. +and de Sitter space. + symmetry: the sum of the bodies in my universe's influence on my inertial frame is equal to my influence in return. distribution of galactic angular velocities? +elliptic curves as geodesics? + + Intro ===== From 7f7be34571283836e8bbdf3a62a71045afb68411 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 27 Jan 2019 19:58:40 -0500 Subject: [PATCH 516/642] clock rewind strangeness --- docs/nodice/etpm.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/nodice/etpm.rst b/docs/nodice/etpm.rst index b961ff2..b70da82 100644 --- a/docs/nodice/etpm.rst +++ b/docs/nodice/etpm.rst @@ -38,4 +38,3 @@ But not a proof that can be patched, no matter how many patches are applied? So let's wind back the clock and see where we might have gone astray? - From 89ac921e791f57c38440a5c07ac1650092451ec8 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 30 Jan 2019 16:41:17 -0500 Subject: [PATCH 517/642] corrections and observations added to inertia --- docs/nodice/inertia.rst | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/docs/nodice/inertia.rst b/docs/nodice/inertia.rst index e9ce991..c44ab86 100644 --- a/docs/nodice/inertia.rst +++ b/docs/nodice/inertia.rst @@ -11,7 +11,7 @@ idea? Things that once took months or years now could be done in a day. Spreadsheets were a revelation to many and made it easy to find new -in-sights. +insights. The tools helped you learn what could be done. @@ -24,8 +24,10 @@ then an avalanche of new ideas as ridges are reached. A paradigm shift, climb up a higher mountain and see what could only be dreamed of before. +From on high you can see the answer to riddles you have long taken as law. + The new paradigm explains much, assumptions turn into facts, or rather -disappear from the discourse. +disappear from the discourse. Take, *The big bang theory*, the universe is expanding, it must have been tiny once, not so very long ago. @@ -39,8 +41,8 @@ And expanding and contracting at one and the same? Now for some history of gravitational waves. -Michelsson-Morley experiment -============================ +Michelson-Morley experiment +=========================== In 1887, Albert A. Michelson and Edward W. Morley conducted an experiment in Cleveland, Ohio. @@ -97,6 +99,20 @@ The software also gives an estimate of the distance based on the intensity of the wave when received at LIGO compared to that at the actual collision. +Ligo Observations:: + + n E_rad mass1 mass2 redshift + 0 3.10 35.60 30.60 0.09 + 1 1.50 23.30 13.60 0.21 + 2 1.00 13.70 7.70 0.09 + 3 2.20 31.00 20.10 0.19 + 4 0.90 10.90 7.60 0.07 + 5 4.80 50.60 34.30 0.48 + 6 2.70 35.20 23.80 0.20 + 7 2.70 30.70 25.30 0.12 + 8 0.04 1.46 1.27 0.01 + 9 2.70 35.50 26.80 0.20 + 10 3.30 39.60 29.40 0.34 Black holes colliding @@ -177,10 +193,10 @@ It is suggested that with a neutron star involved all sorts of additional radiation could be expected. -Another Paradigm -================ +A New Paradigm +============== -Colin Rourke's *Another paradigm for the universe* suggests that +Colin Rourke's *A new paradigm for the universe* suggests that gamma-ray bursts may in fact an optical illusion, as we see the *quasi-infinite* past of a universe just arriving in our visible universe. @@ -209,7 +225,7 @@ and lower bound on the frequency that they can detect. I am also not sure how the waves get modulated when you take into account the way the central black hole itself distorts space time. -I believe *anoptu* discusses geodesics can follow a cusp-like path? +I believe *anpftu* discusses geodesics can follow a cusp-like path? This would allow lots of opportunity for modulation of the wave. From 2af9e5c9886b258ebd00e6ea5ab630a025488790 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 30 Jan 2019 17:23:04 -0500 Subject: [PATCH 518/642] what's a parsec or two between friends? --- docs/nodice/inertia.rst | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/docs/nodice/inertia.rst b/docs/nodice/inertia.rst index c44ab86..b2ef775 100644 --- a/docs/nodice/inertia.rst +++ b/docs/nodice/inertia.rst @@ -99,7 +99,7 @@ The software also gives an estimate of the distance based on the intensity of the wave when received at LIGO compared to that at the actual collision. -Ligo Observations:: +Ligo Observations to date (january 2019):: n E_rad mass1 mass2 redshift 0 3.10 35.60 30.60 0.09 @@ -115,16 +115,18 @@ Ligo Observations:: 10 3.30 39.60 29.40 0.34 + Black holes colliding ===================== -*m_1* mass of larger object +*mass1* or *m_1* mass of larger object. -*m_2* mass of smaller object +*mass2* or *m_2* mass of smaller object -*r* distance from observatory +*redshift* or *r* distance from observatory, based on observed versus + emitted intensity. Events are assumed to be rare, hence none so far none have been near to home. @@ -178,6 +180,16 @@ Neutron stars too There have been detections thought to be due to a neutron star colliding with a black hole, or possibly another neutron star. +Update: I did a bit of digging into binary star collisions. + +Apparently, there is a *final parsec* problem, which turns out to be a +final 0.01 - 0.001 of a parsec. + +In short, whilst there is an explanation how they could approach +within 1 parsec of each other, the final 0.01 or 0.001 could take a +very long time. + + Gamma ray bursts ================ @@ -198,7 +210,7 @@ A New Paradigm Colin Rourke's *A new paradigm for the universe* suggests that gamma-ray bursts may in fact an optical illusion, as we see the -*quasi-infinite* past of a universe just arriving in our visible +*quasi-infinite* past of a galaxy just arriving in our visible universe. It is all a result of the paths of the *geodesics* in the *de Sitter* @@ -323,6 +335,15 @@ quantum gravity. Here *good* is in the sense that it approximates the actual physics well enough to create credible simulations of the events. + +Expanding and contracting +========================= + +TODO: add note from Colin explaining how our conclusion that our entire +universe is expanding is an extreme example of *observer selection +bias*. + +More to come. Virgo @@ -470,7 +491,7 @@ preserve the number of waves multiplied by the number of waves being supported, which in any plane just has to increase as r increases, so amplitude dropping as 1/r. -Any obsemver is just a point on the surface of the sphere equidistant +Any observer is just a point on the surface of the sphere equidistant from the body. Observers nearby will see a very similar picture, since the wave is moving smoothly. @@ -498,8 +519,6 @@ Wave Open Science Centre is invaluable:: https://www.gw-openscience.org/ - - For more details, https://wikipedia.org has been an invaluable starting point. From ed390402e3cb7ea238e96cfe9e6d80c1488dcb4b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 30 Jan 2019 17:33:14 -0500 Subject: [PATCH 519/642] add names aka dates to gw data --- docs/nodice/inertia.rst | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/docs/nodice/inertia.rst b/docs/nodice/inertia.rst index b2ef775..ff8b2b4 100644 --- a/docs/nodice/inertia.rst +++ b/docs/nodice/inertia.rst @@ -101,19 +101,18 @@ actual collision. Ligo Observations to date (january 2019):: - n E_rad mass1 mass2 redshift - 0 3.10 35.60 30.60 0.09 - 1 1.50 23.30 13.60 0.21 - 2 1.00 13.70 7.70 0.09 - 3 2.20 31.00 20.10 0.19 - 4 0.90 10.90 7.60 0.07 - 5 4.80 50.60 34.30 0.48 - 6 2.70 35.20 23.80 0.20 - 7 2.70 30.70 25.30 0.12 - 8 0.04 1.46 1.27 0.01 - 9 2.70 35.50 26.80 0.20 - 10 3.30 39.60 29.40 0.34 - + n E_rad mass1 mass2 redshift name + 0 3.10 35.60 30.60 0.09 GW150914 + 1 1.50 23.30 13.60 0.21 GW151012 + 2 1.00 13.70 7.70 0.09 GW151226 + 3 2.20 31.00 20.10 0.19 GW170104 + 4 0.90 10.90 7.60 0.07 GW170608 + 5 4.80 50.60 34.30 0.48 GW170729 + 6 2.70 35.20 23.80 0.20 GW170809 + 7 2.70 30.70 25.30 0.12 GW170814 + 8 0.04 1.46 1.27 0.01 GW170817 + 9 2.70 35.50 26.80 0.20 GW170818 + 10 3.30 39.60 29.40 0.34 GW170823 Black holes colliding From 8bcbd4e556b873988798a65ed7ece62a3543932b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 30 Jan 2019 18:15:08 -0500 Subject: [PATCH 520/642] coincident reports of sweeping manta rays --- docs/nodice/inertia.rst | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/docs/nodice/inertia.rst b/docs/nodice/inertia.rst index ff8b2b4..f0c8f3b 100644 --- a/docs/nodice/inertia.rst +++ b/docs/nodice/inertia.rst @@ -209,8 +209,8 @@ A New Paradigm Colin Rourke's *A new paradigm for the universe* suggests that gamma-ray bursts may in fact an optical illusion, as we see the -*quasi-infinite* past of a galaxy just arriving in our visible -universe. +*quasi-infinite* past of a light source, perhaps a galaxy, just +arriving in our visible universe. It is all a result of the paths of the *geodesics* in the *de Sitter* space used to model our part of the universe, our visible universe. @@ -226,6 +226,31 @@ arrival of any light from the galaxy. Further, it should be noted that the gravitational wave also modulates the light, as it is in essence, part of the carrier wave. +It is noted that coincident with the first gravitational wave +detection on 14th September 2015 the Fermi Gamma-Ray space telescope +reported that a gamma-ray burst monitor instrument detected a weak +burst above 50 keV, starting 0.4 seconds after the LIGO event. + +It also had a positional uncertainty overlapping that of the LIGO +event. + +However, the black hole/black hole collision that is assumed to have +given rise to the event was not expected to create a GRB, so this +observation is largely ignored. + +In contrast, the 17th August 2017 event, involving smaller bodies, +deemed closer to earth was subsequently views across the +electromagnetic spectrum:: + + + https://en.wikipedia.org/wiki/GW170817 + +Here, the masses of the bodies involved were each less than 1.5 solar +masses. + +It seems this whole arena is rife with observer bias issues, of all +sorts of flavours. + Why no gravitational waves for long duration gamma-ray bursts? -------------------------------------------------------------- From 82eded667e040c2a3e9f125e6d68ac10e7f0734a Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 13 Feb 2019 17:02:20 -0500 Subject: [PATCH 521/642] life in the multiverse zach gill --- docs/nodice/litm.rst | 70 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 docs/nodice/litm.rst diff --git a/docs/nodice/litm.rst b/docs/nodice/litm.rst new file mode 100644 index 0000000..03e0846 --- /dev/null +++ b/docs/nodice/litm.rst @@ -0,0 +1,70 @@ +======================== + Life in the multiverse +======================== + +by Zach Gill + +I bought this CD along with a couple of others early in the year. + + +I'd never heard of Zach Gill, but I was busy contemplating the +universe with patience and guidance from Colin Rourke as I was +starting to explore his view on the universe. + +So, I couldn't resist this. + +But then months passed before the CD and a CD player came to be in the +same point in the universe. + +The first word on the first track is *Johnny*:: + + + Johnny had a new plan + time to be his own man + knew that things would work out ok + mostly optimistic, not hung on apologistic, + he does the work before he gets paid + + he gets up + he gets down + + hoping that the word gets around + + it's a struggle, that's ok + learn a little more each day + + and if the rain don't come tomorrow it will come some day + + ... it will come some day + +The track is called *Window Dressing*. + +And the second track is solstice:: + + It was the solstice, it was a nice day + + Felt like the sun's rays, were shining from above + + It was the solstice, 2016 + + Felt like I was sixteen and in love + + + She was my wifey, moving like shakira + + I took her to bermuda + + We started to dance + + It was the solstice, 2016 + + Still inthe sweetd dream of romance + + your hearts going to do just exactly what it's going to do + + so come on synchronicity ... + + your hearts going to do just exactly what it's going to do + + + ... From cd43050bf8cc5cff965c5a654a5c5ab266ac3bc9 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 13 Feb 2019 17:52:36 -0500 Subject: [PATCH 522/642] coincidence in the multiverse --- docs/nodice/litm.rst | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/nodice/litm.rst b/docs/nodice/litm.rst index 03e0846..c8d3bd4 100644 --- a/docs/nodice/litm.rst +++ b/docs/nodice/litm.rst @@ -39,6 +39,11 @@ The first word on the first track is *Johnny*:: The track is called *Window Dressing*. +I'm not great at picking out lyrics, so it took me a while to pick up +the words, not least it seemed to be following my life... or rather +there's enough here to weave a lot of coincidence into a story. + + And the second track is solstice:: It was the solstice, it was a nice day @@ -68,3 +73,9 @@ And the second track is solstice:: ... + + +Again it feels personal, there's coincidence a plenty here a mixing of +universal stories. + +And there is more of course. From e28bcfb224abe7401fd35db4e65cd1e3d63bcbc4 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 26 Mar 2019 16:09:18 -0400 Subject: [PATCH 523/642] sweet nothings in the multiverse --- docs/nodice/litm.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/nodice/litm.rst b/docs/nodice/litm.rst index c8d3bd4..11fef57 100644 --- a/docs/nodice/litm.rst +++ b/docs/nodice/litm.rst @@ -63,7 +63,7 @@ And the second track is solstice:: It was the solstice, 2016 - Still inthe sweetd dream of romance + Still in the sweet dream of romance your hearts going to do just exactly what it's going to do From 295409e7db1cfe0fc0c0c6f25209c3740f9459c6 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 7 Apr 2019 14:16:18 -0400 Subject: [PATCH 524/642] old ramblings on harmony --- docs/nodice/mana.rst | 107 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 106 insertions(+), 1 deletion(-) diff --git a/docs/nodice/mana.rst b/docs/nodice/mana.rst index 4c7c439..1725987 100644 --- a/docs/nodice/mana.rst +++ b/docs/nodice/mana.rst @@ -2,4 +2,109 @@ From Rano Raraku to Orongo ============================ -There and back to see how far it is. +There and back again, to see how far it is. + +A 500 million year musical adventure. + +Planetary harmony +================= + +Stable systems follow harmonic rules. + +cf periods of neighbouring planetary conjugations. + +Solar wind +========== + +This is supersonic at times, but broadly the right speed, 300km/s or so. + +This is fascinating: + +https://en.wikipedia.org/wiki/Interplanetary_magnetic_field + +https://en.wikipedia.org/wiki/Interplanetary_magnetic_field#/media/File:Heliospheric-current-sheet.gif + +Galactic wind? +============== + +Surely galaxies must have similar features? + +Magnetic springs +================ + +gyroscopes. System stabilizers. + +Field carried by solar wind. + + +Micro-waves and water +===================== + +CMB that we see has passed the Hubble distance and lots of intervening +matter. + +So there is a question of what exactly are we looking at? + +Filtered(Background) + +But doesn't the filter mirror what is beyond? + +And broadly shaped by it? + +How far can we really see? + + +Conservation of momentum +======================== + +Even with the tangential inertial drag, the momentum of the whole +system is maintained as + +Note round trip time between bodies: period for harmonics? + +Earth/sun: 16 minutes. + +Earth moon: 2.6 seconds. + +Everything wobbles about it's period. + + +LIGO +==== + +My guess is galactic arrivals are lower frequency than current +technology detects. + +Wil see what turns up this year as I think new science runs are due. + + +Climate and quake +================= + + + +Numerology department +===================== + +500 million light years ~= distance travelled relative to inertial +field in time for CMB to arrive. + +2 degrees at the Hubble distance. + +Harmonics too. 1/3 and 1/5. + +Keep thinking of:: + + \pi / 4 = 1 - 1/3 + 1/5 - 1/7 + 1/9 ... + + + + + +1 degree: precession of earth in 72 years, relative to celestial +background. 26,000 years per cycle. + +Moai +==== + +Giant magnets that walked when the mana flowed. From 3a47efe7bd50d7c6c24952587b2311bcc8709557 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 7 Apr 2019 15:18:03 -0400 Subject: [PATCH 525/642] mana from heaven --- docs/nodice/mana.rst | 153 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 152 insertions(+), 1 deletion(-) diff --git a/docs/nodice/mana.rst b/docs/nodice/mana.rst index 1725987..8689af6 100644 --- a/docs/nodice/mana.rst +++ b/docs/nodice/mana.rst @@ -16,7 +16,11 @@ cf periods of neighbouring planetary conjugations. Solar wind ========== -This is supersonic at times, but broadly the right speed, 300km/s or so. +This is supersonic at times, but broadly the right speed, 300km/s or +so. Or not, think I am out by three orders of magnitude! + +Should come as a caveat in what follows, just trying to get some ideas +written down. This is fascinating: @@ -53,6 +57,135 @@ And broadly shaped by it? How far can we really see? +I keep thinking of consequences of Mach's principle when you divide +things into three bodies::: + + Thing of omega as angular momentum or intertial field of body + + \omega_U = \omega_G + \omega_B + +Where:: + $U$ represents universe's inertial effect on the galaxy. + $G$ represents the galaxies inertial effect on the universe. + $B$ represents central black hole's inertial effect on the Universe. + + In fact, U, G, B could be any three bodies, but in this case I am + distinguishing the matter in the central black hole from the rest of + the galaxy and noting this is 90% of the total mass in the galaxy. + +The first paragraph in Colin Rourke's, "A new paradigm for the +universe":: + + This book provides a completely new approach to understanding the + universe. The main idea is that the principal objects in the + universe form a spectrum unified by the presence of a massive or + hypermassive black hole. These objects are variously called + quasars, active galaxies and spiral galaxies. The key to + understanding their dynamics is angular momentum and the key tool, + and main innovative idea of this work, is a proper formulation of + ``Mach's principle'' using Sciama's ideas. + + + + +With the above in mind, I think it is reasonable to just restrict +ourselves to the central black holes. + +Noting, that each central mass will reflect it's surrounding galaxy. + +Noting that harmony appears everywhere in stable systems. + +2.7K background radiation. Energy from oscillations of local +gravitational field. + +Incoming: GRB + +Leaving: receding galaxies, below the noise + +Gamma ray bursts. + +Galaxies with the same period, support each other, dancing together. + +Ripple from a galaxy that is aligned would be tiny relative to the +light ray that it carries. Tiny corresponds to lower frequency, +perhaps we will start to see these as the LIGO detectors get more +sensitive and more plentiful. + +The smaller quasars, responsible for weaker GRB, are more likely to +impact the inertial field, relative to it's galaxy's background. +Hence higher frequency gravitational wave. + +Three components: angle of rotation of BH, three components. + + +Gravitational field for a newly arriving galaxy is in sync with +surroundings and will have been emitting energy (seen as CMB) for a +good while. As far as the graitational wave that arrives, there is no +surprise. + +Geodesic version: + + Thing in terms of light following a geodesic in de Sitter Space. + It will be subject to any harmonics in the inertial field. + + In short, galaxies release energy in terms of the modulations that + the galaxy makes to the background inertial field. + +Note that the geodesics are the de Sitter field after it has been +modulated by the black holes, which are moving in a universal wave. + +The period is limited by the speed of light across the visible +universe and in particular by the distance a body moves relative to +its inertial background in the time it takes to cross the Hubble +distance. + + +A black hole of a given mass is limited into the size of inertial +impact by the rate at which it can transfer angular momentum to the +surrounding universe. + +This in turn is limited by the size of the black hole. + +In the limit, appears to be around 300km/s. + + +At this point there are lots of levels of these systems where we reach +a point of equilibrium. Many just adabpt to their environment. + +Maybe all do? + + +Fundamental +=========== + +Think of black holes as balls tied together with magic strings, +spinning together. + +The energy which drives this system is a wobble in the wave of time. + +It would seem to have been running a while. + +Time for harmonies to arise on a huge scale. + +There appear to be a lot of levels through the universe where stable +systems can emerge. + +Is 2.7K enough to heat a visible universe? It would seem so. + +Now we see a 500 million year wobble in the CMB. + +This is the sum of new arrivals over all departures in the life of a +universe. + +There are lots of levels througout our universe where stable systems +can emerge. By stable, structures that can potentially sustain +themselves for billions of years. + +As well of systems that exist for a fraction of a second, in a +localised area. + +System: anything that affects the inertial field. + Conservation of momentum ======================== @@ -81,6 +214,24 @@ Wil see what turns up this year as I think new science runs are due. Climate and quake ================= +Earth's magnetic field has varied considerably over the estimaated 4 +billion year age of earth. + +Presumably, magnetic storms within the earth (and any planet with +magnetic field) will presumably be driven by common drivers::: + + period of local body's magnetic field + + period of local body's day/year + + body could be star, planet, moon, electron, proton... + +As an example, the field around the earth will be dominated by the local +magnetic core, but then the sun, moon, and planets, particular note +jupiter. + +A bodies affect on the rest of the universe's inertial field exactly +matches it's difference to that inertial field. Numerology department From e6f7b42b4ec667fcff0f3e87cbb29b1618e77532 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 7 Apr 2019 15:21:38 -0400 Subject: [PATCH 526/642] geodesic update --- docs/nodice/mana.rst | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/nodice/mana.rst b/docs/nodice/mana.rst index 8689af6..1263d63 100644 --- a/docs/nodice/mana.rst +++ b/docs/nodice/mana.rst @@ -123,7 +123,8 @@ surroundings and will have been emitting energy (seen as CMB) for a good while. As far as the graitational wave that arrives, there is no surprise. -Geodesic version: +Geodesic version::: + Thing in terms of light following a geodesic in de Sitter Space. It will be subject to any harmonics in the inertial field. @@ -131,6 +132,11 @@ Geodesic version: In short, galaxies release energy in terms of the modulations that the galaxy makes to the background inertial field. + Idea is de Sitter space with a 500 million year wobble. + + Limitting factor is inertial effect a black hole can have on + terminal speed of matter in its galaxy. + Note that the geodesics are the de Sitter field after it has been modulated by the black holes, which are moving in a universal wave. From bc70d287d1117aa119a175abb1a37e19c69a8c2d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 7 Apr 2019 15:25:38 -0400 Subject: [PATCH 527/642] white space? --- docs/nodice/mana.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/nodice/mana.rst b/docs/nodice/mana.rst index 1263d63..ee1314f 100644 --- a/docs/nodice/mana.rst +++ b/docs/nodice/mana.rst @@ -64,7 +64,8 @@ things into three bodies::: \omega_U = \omega_G + \omega_B -Where:: +Where::: + $U$ represents universe's inertial effect on the galaxy. $G$ represents the galaxies inertial effect on the universe. $B$ represents central black hole's inertial effect on the Universe. From 6b62134a64c097b8ef8f3ce5f6a36033a420ed9e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 7 Apr 2019 16:05:42 -0400 Subject: [PATCH 528/642] water based life forms --- docs/nodice/mana.rst | 70 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 65 insertions(+), 5 deletions(-) diff --git a/docs/nodice/mana.rst b/docs/nodice/mana.rst index ee1314f..1ca8fce 100644 --- a/docs/nodice/mana.rst +++ b/docs/nodice/mana.rst @@ -155,12 +155,26 @@ This in turn is limited by the size of the black hole. In the limit, appears to be around 300km/s. - At this point there are lots of levels of these systems where we reach -a point of equilibrium. Many just adabpt to their environment. +a point of equilibrium. Many have just adapted to their environment, +but the adaptation may be so good it is barely noticeable. + +Whenever you get to the point where gravity is the key force then +matter starts to move in harmony, that's just how matter works, it is +how waves work, waves of same frequency interfere and support each +other. Waves of differing frequencies degenerate into which noise, +or rather randomly support the underlying wave. + +distorting space time is tough. Maybe all do? +So the energy produced by all the galaxies is causing space time to +resonate. + +The base frequency determined by the distribution of distances +travelled in the Hubble time, relative to the inertial field of the +surrounding universe. Fundamental =========== @@ -184,7 +198,7 @@ Now we see a 500 million year wobble in the CMB. This is the sum of new arrivals over all departures in the life of a universe. -There are lots of levels througout our universe where stable systems +There are lots of levels throughout our universe where stable systems can emerge. By stable, structures that can potentially sustain themselves for billions of years. @@ -192,13 +206,50 @@ As well of systems that exist for a fraction of a second, in a localised area. System: anything that affects the inertial field. - + + +Equilibria +========== + +Planet orbitting sun. + +Spiral galaxy arms. + +Conservation of angular momentum, tangential inertial drag. + +There are so many of these points of equilibria. + +On closer inspection, the reason relates to the size of some +fundamental particle, a proton for example. + +So whilst we have answered the question, we now have a new question, +why protons? + +There should be a relation between the variation in temperature of the +CMB and wavelength of that variation. And is there a point where the +CMB almost exactly balances the inertial effect of the black holes? + +And it does so because each adjustment to a gravitational field, +arrives as a gravitational wave from that body, a burst of energy as +it becomes visible, with smooth updates thereafter. + +But also as the CMB background. + +This wave is modulated by the intervening matter, and being microwave +will be modulated by water and ice. + +Interesting to consider implications for water based life forms. + +But some of these waves may be invisible to us on earth due to the +oceans we have. + +Rather earth will modulate the field, as will any tidal body. Conservation of momentum ======================== Even with the tangential inertial drag, the momentum of the whole -system is maintained as +system is just a wave of wavelength equal to the orbit time of the body. Note round trip time between bodies: period for harmonics? @@ -215,6 +266,15 @@ LIGO My guess is galactic arrivals are lower frequency than current technology detects. +The reasoning is that the modulation of de Sitter that an arriving +galaxy creates is low frequency. + +Whereas a moderate sized quasar arriving would likely have a field +differing significantly to its associated galaxy. + +Indeed should consider modelling this: interaction between inertial +field for a galaxy and a nearby quasar. + Wil see what turns up this year as I think new science runs are due. From b2c1fbcf16d37dbaff33aef56254899246624879 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 19 Apr 2019 15:23:40 -0400 Subject: [PATCH 529/642] start simplifying dependencies --- karmapi/grb.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/karmapi/grb.py b/karmapi/grb.py index 05fede3..8156273 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -116,8 +116,6 @@ from astropy import coordinates, constants from astropy.time import Time -from matplotlib import pyplot as pp - import curio from karmapi import base, cpr, pigfarm @@ -235,6 +233,8 @@ def latlon2xy(self, lat, lon): def gamma_hack(): + from matplotlib import pyplot as pp + T = 1000 k = 10000 From 6442f484a97456ff9870fd277d05b95417abb8e2 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 8 May 2019 12:01:20 -0400 Subject: [PATCH 530/642] copernicus data service example --- karmapi/cds.py | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 karmapi/cds.py diff --git a/karmapi/cds.py b/karmapi/cds.py new file mode 100644 index 0000000..0766a2d --- /dev/null +++ b/karmapi/cds.py @@ -0,0 +1,64 @@ +""" +Coppernicus data service interface +""" + +import cdsapi + +c = cdsapi.Client() + +years = [ + '1979','1980','1981', + '1982','1983','1984', + '1985','1986','1987', + '1988','1989','1990', + '1991','1992','1993', + '1994','1995','1996', + '1997','1998','1999', + '2000','2001','2002', + '2003','2004','2005', + '2006','2007','2008', + '2009','2010','2011', + '2012','2013','2014', + '2015','2016','2017', + '2018' + ] + + +months = ['%02d' % x for x in range(1, 13)] + +days = ['%02d' % x for x in range(1, 32)] + +times = ['%02d:00' % x for x in range(0, 24)] + +years = ['1979'] +months = ['01'] +days = ['01'] + +print(years) +print(months) +print(days) +print(times) + +c.retrieve( + 'reanalysis-era5-single-levels', + { + 'product_type':'reanalysis', + 'format':'grib', + 'variable':[ + '2m_temperature','total_precipitation' + ], + 'year': years, + 'month': months, + 'day': days, + 'time':[ + '00:00','01:00','02:00', + '03:00','04:00','05:00', + '06:00','07:00','08:00', + '09:00','10:00','11:00', + '12:00','13:00','14:00', + '15:00','16:00','17:00', + '18:00','19:00','20:00', + '21:00','22:00','23:00' + ] + }, + 'download.grib') From a799583a774134f0e6cf962438a67a686e2e5e12 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 8 May 2019 12:08:58 -0400 Subject: [PATCH 531/642] ignore pdf's --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index afe5cbf..df7b3e1 100644 --- a/.gitignore +++ b/.gitignore @@ -55,6 +55,9 @@ coverage.xml # Sphinx documentation docs/_build/ +# pdf's +*.pdf + # PyBuilder target/ From 160812b4af06e29ef200d38f30ab8903b6ab0cdd Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 8 May 2019 12:09:50 -0400 Subject: [PATCH 532/642] history typo and start of a refactor adventure? --- karmapi/grb.py | 2 +- karmapi/pig.py | 4 ---- karmapi/pigfarm.py | 2 +- karmapi/tankrain.py | 1 + requirements.txt | 4 ++-- 5 files changed, 5 insertions(+), 8 deletions(-) diff --git a/karmapi/grb.py b/karmapi/grb.py index 8156273..3c66de6 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -40,7 +40,7 @@ Now if a gamma-ray burst indicates a new galaxy arriving in our visible universe, with the burst representing the, finite, but unbounded history of the -universe, including the histlory of its inertial drag field. +universe, including the history of its inertial drag field. This latter, is hypothesised to be driven by a super-massive object (~10^11 solar masses) at the centre of the galaxy. diff --git a/karmapi/pig.py b/karmapi/pig.py index 0efb44b..14c1ad3 100644 --- a/karmapi/pig.py +++ b/karmapi/pig.py @@ -10,10 +10,6 @@ import sys import inspect -from multiprocessing import cpu_count - -from concurrent.futures import ProcessPoolExecutor - import curio # import this early, I like pandas. diff --git a/karmapi/pigfarm.py b/karmapi/pigfarm.py index 2ea027f..5d1d85b 100644 --- a/karmapi/pigfarm.py +++ b/karmapi/pigfarm.py @@ -694,7 +694,7 @@ def draw_table( colColours=col_colours, cellText=cells, cellColours=colours, - cellEdgeColours=colours, + #cellEdgeColours=colours, bbox=bbox, loc=loc) diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index 89165a3..903c334 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -132,6 +132,7 @@ def _compute_data(self): ball = cpr.Sphere(im.size) ball.rgb = np.array(im) + print('brs', ball.rgb.shape) else: # FIXME -- create an image that shows there is no data # for now, lets just show a rainbow diff --git a/requirements.txt b/requirements.txt index eec8a30..82a3686 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,8 +3,8 @@ astropy # so we can find jupiter and more -matplotlib==2.1 # jupyter should provide this.. maybe it doesn't -pandas # this might provide matplotib +#matplotlib==2.1 # jupyter should provide this.. maybe it doesn't +#pandas # this might provide matplotib #pyaudio # for sound curio # for async magic From ed8e3efdd9218a743bc11d27ae8cb137aa9dd373 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 13 May 2019 19:29:56 -0400 Subject: [PATCH 533/642] thinking about pipig backend --- karmapi/backends/pipig.py | 40 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 karmapi/backends/pipig.py diff --git a/karmapi/backends/pipig.py b/karmapi/backends/pipig.py new file mode 100644 index 0000000..162e59a --- /dev/null +++ b/karmapi/backends/pipig.py @@ -0,0 +1,40 @@ +""" +A default backend. + +Or a new beginning? + +After many adventures, let's go with simple Tk, with a twist. + +Just display the latest image from the deque. + +pigfarm: Space Yard PillBox and MagicCarpet + + Space the base + + Yard with at Canvas as an artist + + PillBox: goal is a PIL.Image as artist + + MagicCarpet: + matplotlib and pandas world??? + +All come with different artists. + +pipig will focus on PIL, images, grids of data, often spherical. + +With the Canvas conversion to an image can be problematic. + +The PIL.Draw api is rich enough for karma pi needs and on a par with the canvas +api, so I don't need both here, let's stick to images. + +matplotlib will return images that can be similarly displayed, so I think we +may be good. + +Whereas adding an image to tk for display purposes is (relatively) seamless (?) + +So on the python side then PIL, or rather pillow + +Grids or projections from spheres + + +""" From ab18a509fb9ccc72b4c340927601df10f359b8d6 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 13 Jun 2019 15:01:30 -0400 Subject: [PATCH 534/642] add fixed up version of matplotlib table.py --- docs/cpr.rst | 37 ++ karmapi/backends/tkpig.py | 17 +- karmapi/grb.py | 38 +- karmapi/pigfarm.py | 6 +- karmapi/piglet.py | 6 +- karmapi/table.py | 975 ++++++++++++++++++++++++++++++++++++++ 6 files changed, 1048 insertions(+), 31 deletions(-) create mode 100644 karmapi/table.py diff --git a/docs/cpr.rst b/docs/cpr.rst index 47ebbcb..b3abd5e 100644 --- a/docs/cpr.rst +++ b/docs/cpr.rst @@ -88,3 +88,40 @@ Mach and de Sciama de Sitter Space =============== + +New Edition +=========== + +:: + + Thus, unlike the dark matter hypothesis, the inertial drag + hypothesis is a necessary part of a complete theory. Furthermore, + the inertial drag hypothesis also underlies a good model for the + dynamics of spiral galaxies, whereas the dark matter hypothesis + leaves this problem unsolved. + + +Indeed, the inertial drag model shows how the dark matter would need +to be arranged. + + +:: + + Here it is explained how inertial drag allows black holes to absorb + the angular momentum in infalling gas/plasma and to grow by + accretion. + + +This bit always my head hurt until now. + +So momentum is conserved overall, it just passes from infalling matter +to the black hole. + +So momentum conserved overall (in-falling matter + black hole). + + + +Re Sag A*:: + + This misunderstanding will be cleared up at a later stage. + diff --git a/karmapi/backends/tkpig.py b/karmapi/backends/tkpig.py index 55b734d..4f58669 100644 --- a/karmapi/backends/tkpig.py +++ b/karmapi/backends/tkpig.py @@ -14,20 +14,11 @@ import curio -# import this early, I like pandas. -import pandas -random = pandas.np.random - import tkinter from tkinter import Tk, ttk, Text, messagebox -from matplotlib.backends.backend_tkagg import FigureCanvas, FigureManager - -from matplotlib.backends import tkagg - -from matplotlib.figure import Figure -from matplotlib import pyplot as plt import numpy as np +random = np.random from PIL import Image, ImageDraw, ImageTk @@ -286,6 +277,9 @@ class PlotImage(Pig): """ def __init__(self, parent, axes=[111], dpi=100, **kwargs): + from matplotlib.figure import Figure + from matplotlib.backends.backend_tkagg import FigureCanvas + super().__init__(parent) fig = Figure(dpi=dpi, **kwargs) @@ -342,10 +336,9 @@ class XKCD(PlotImage): def plot(self): """ Display plot xkcd style """ + from matplotlib import pyplot as plt with plt.xkcd(): - np = pandas.np - data = np.ones(100) data[70:] -= np.arange(30) diff --git a/karmapi/grb.py b/karmapi/grb.py index 3c66de6..1aae364 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -284,6 +284,7 @@ def argument_parser(parser=None): parser.add_argument('--date', default='2017/08/17') parser.add_argument('--grb', default='170817A') + parser.add_argument('--gw', help="file for latest ligo data") return parser @@ -482,11 +483,8 @@ def get_waves(path=None): return data -def main(): +def main(args): - parser = argument_parser(cpr.argument_parser()) - - args = parser.parse_args() print(args.date) args.date = base.parse_date(args.date) @@ -504,7 +502,7 @@ def main(): # pass list of balls into NestedWaves spheres = args_to_spheres(args, t) - dump(spheres) + #dump(spheres) farm = pigfarm.sty(SolarSystem, dict(balls=spheres, fade=args.fade, twist=args.twist), @@ -518,11 +516,9 @@ def main(): curio.run(farm.run, with_monitor=True) - - -if __name__ == '__main__': - - waves = get_waves(Path('./gw.json')) +def gravity_waves(path): + """ Read or download gravity wave observations """ + waves = get_waves(path) data = waves['data'] @@ -547,11 +543,23 @@ def main(): rows.append(row) - import pandas + return rows + + +if __name__ == '__main__': + - df = pandas.DataFrame(rows) - print(df.describe()) + parser = argument_parser(cpr.argument_parser()) - #1/0 - main() + args = parser.parse_args() + + if args.gw: + rows = gravity_waves(Path(args.gw)) + + import pandas + + df = pandas.DataFrame(rows) + print(df.describe()) + else: + main(args) diff --git a/karmapi/pigfarm.py b/karmapi/pigfarm.py index 5d1d85b..8675ca4 100644 --- a/karmapi/pigfarm.py +++ b/karmapi/pigfarm.py @@ -668,6 +668,7 @@ def draw_table( """ Draw a table on the axes """ from matplotlib import colors, cm, table + from karmapi.table import table norm = colors.Normalize() stats, cells, rows, cols = self.frame_to_stats(data) @@ -687,14 +688,15 @@ def draw_table( bbox = (0.0, 0.0, 1.0, 1.0) - tab = self.axes.table( + tab = table(self.axes, rowLabels=rows, rowColours=row_colours, colLabels=cols, colColours=col_colours, cellText=cells, cellColours=colours, - #cellEdgeColours=colours, + cellEdgeColours=colours, + edges=['clos', 'ed'], bbox=bbox, loc=loc) diff --git a/karmapi/piglet.py b/karmapi/piglet.py index 77d9056..789a621 100644 --- a/karmapi/piglet.py +++ b/karmapi/piglet.py @@ -17,10 +17,12 @@ from .backends.hatpig import * -else: - +elif joy.BACKEND == 'tk': from .backends.tkpig import * +else: + from .backends.pipig import * + global YQ YQ = curio.Queue() diff --git a/karmapi/table.py b/karmapi/table.py new file mode 100644 index 0000000..2fcc8ce --- /dev/null +++ b/karmapi/table.py @@ -0,0 +1,975 @@ +# Original code by: +# John Gill +# Copyright 2004 John Gill and John Hunter +# +# Subsequent changes: +# The Matplotlib development team +# Copyright The Matplotlib development team + +""" +This module provides functionality to add a table to a plot. + +Use the factory function `~matplotlib.table.table` to create a ready-made +table from texts. If you need more control, use the `.Table` class and its +methods. + +The table consists of a grid of cells, which are indexed by (row, column). +The cell (0, 0) is positioned at the top left. + +Thanks to John Gill for providing the class and table. + +""" + +from matplotlib import artist, cbook, docstring +from matplotlib.artist import Artist, allow_rasterization +from matplotlib.patches import Rectangle +from matplotlib.text import Text +from matplotlib.transforms import Bbox +from matplotlib.path import Path + + +class Cell(Rectangle): + """ + A cell is a `.Rectangle` with some associated `.Text`. + + Edge visibility is also configurable. + + .. note: + As a user, you'll most likely not creates cells yourself. Instead, you + should use either the `~matplotlib.table.table` factory function or + `.Table.add_cell`. + + Parameters + ---------- + xy : 2-tuple + The position of the bottom left corner of the cell. + width : float + The cell width. + height : float + The cell height. + edgecolor : color + The color of the cell border. + facecolor : color + The cell facecolor. + fill : bool + Whether the cell background is filled. + text : str + The cell text. + loc : {'left', 'center', 'right'}, default: 'right' + The alignment of the text within the cell. + fontproperties : dict + A dict defining the font properties of the text. Supported keys and + values are the keyword arguments accepted by `.FontProperties`. + visible_edges : str + A substring of 'BRTL' (bottom, right, top, left) or one + of {'open', 'closed', 'horizontal', 'vertical'}. + """ + + VPAD = 0.1 + """Vertical padding between text and rectangle.""" + + HPAD = 0.6 + """Multiple of fontsize to use as Horizontal between text and rectangle.""" + + _edges = 'BRTL' + """default value for visible edges.""" + + _edge_aliases = {'open': '', + 'none': '', + 'closed': 'BRTL', + 'all': 'BRTL', + 'horizontal': 'BT', + 'vertical': 'RL', + 'bottom': 'B', + 'right': 'R', + 'top': 'T', + 'left': 'L' + } + + def __init__(self, xy, width, height, + edgecolor='k', facecolor='w', + fill=True, + text='', + loc=None, + fontproperties=None, + visible_edges=None, + ): + + # Call base + Rectangle.__init__(self, xy, width=width, height=height, fill=fill, + edgecolor=edgecolor, facecolor=facecolor) + self.set_clip_on(False) + + self.visible_edges = visible_edges + + # Create text object + if loc is None: + loc = 'right' + self._loc = loc + self._text = Text(x=xy[0], y=xy[1], text=text, + fontproperties=fontproperties) + self._text.set_clip_on(False) + + def set_transform(self, trans): + Rectangle.set_transform(self, trans) + # the text does not get the transform! + self.stale = True + + def set_figure(self, fig): + Rectangle.set_figure(self, fig) + self._text.set_figure(fig) + + def get_text(self): + """Return the cell `.Text` instance.""" + return self._text + + def set_fontsize(self, size): + """Set the text fontsize.""" + self._text.set_fontsize(size) + self.stale = True + + def get_fontsize(self): + """Return the cell fontsize.""" + return self._text.get_fontsize() + + def auto_set_font_size(self, renderer, grow=False): + """Adjust font size until the text fits. + + Parameters + ---------- + renderer : Renderer + grow : bool + Whether the font size should also be increased if there is space + available. + """ + + fontsize = self.get_fontsize() + width, height = self.get_required_dimensions(renderer) + + if width == 0: + return fontsize + + # make sure font is large enough + if grow: + while width < self.get_width() and height < self.get_height(): + fontsize += 1 + + self.set_fontsize(fontsize) + width, height = self.get_required_dimensions(renderer) + + # now shrink until it fits + while (fontsize > 1 and + (width > self.get_width() or height > self.get_height())): + fontsize -= 1 + + self.set_fontsize(fontsize) + width, height = self.get_required_dimensions(renderer) + + return fontsize + + @allow_rasterization + def draw(self, renderer): + if not self.get_visible(): + return + # draw the rectangle + Rectangle.draw(self, renderer) + + # position the text + self._set_text_position(renderer) + self._text.draw(renderer) + self.stale = False + + def _set_text_position(self, renderer): + """Set text up so it draws in the right place. + + Currently support 'left', 'center' and 'right' + """ + bbox = self.get_window_extent(renderer) + l, b, w, h = bbox.bounds + + # draw in center vertically + self._text.set_verticalalignment('center_baseline') + y = b + (h / 2.0) + + # now position horizontally + if self._loc == 'center': + self._text.set_horizontalalignment('center') + x = l + (w / 2.0) + elif self._loc == 'left': + self._text.set_horizontalalignment('left') + x = l + self._get_horizontal_pad() + else: + self._text.set_horizontalalignment('right') + x = l + w - self._get_horizontal_pad() + + self._text.set_position((x, y)) + + def get_text_bounds(self, renderer): + """ + Return the text bounds as *(x, y, width, height)*. + """ + bbox = self._text.get_window_extent(renderer) + return bbox + + def get_required_width(self, renderer): + """Return the minimal required width for the cell.""" + width, height = self.get_required_dimensions(renderer) + return width + + def get_required_height(self, renderer): + """Return the minimal required width for the cell.""" + width, height = self.get_required_dimensions(renderer) + return height + + def get_required_dimensions(self, renderer): + """Return the minimal width and height required for this cell.""" + bbox = self.get_text_bounds(renderer) + l, b, w, h = bbox.bounds + + # Calculate text padding + width = w + (2.0 * self._get_horizontal_pad()) + height = h * (1.0 + (2.0 * self.VPAD)) + + # Adjust bbox to include padding + bbox.x1 = bbox.x0 + width + bbox.y1 = bbox.y0 + height + + # apply transform to get width and height in table coordinates. + l, b, w, h = bbox.inverse_transformed(self.get_data_transform()).bounds + return w, h + + def _get_horizontal_pad(self): + """Amount of horizontal padding""" + + # if there is no text, then we don't need padding + if len(self._text._text) == 0: + return 0.0 + + # Simply use font size as padding, looks reasonable in most cases. + return self.get_fontsize() * self.HPAD + + @docstring.dedent_interpd + def set_text_props(self, **kwargs): + """ + Update the text properties. + + Valid kwargs are + + %(Text)s + """ + self._text.update(kwargs) + self.stale = True + + @property + def visible_edges(self): + """ + The cell edges to be drawn with a line. + + Reading this property returns a substring of 'BRTL' (bottom, right, + top, left). + + When setting this property, you can use a substring of 'BRTL' or one + of {'open', 'closed', 'horizontal', 'vertical', 'all', 'none'} + """ + return self._visible_edges + + @visible_edges.setter + def visible_edges(self, value): + if value is None: + self._visible_edges = self._edges + else: + lookup = dict(bottom='B', right='R', top='T', left='L') + value = ''.join((lookup.setdefault(x, x) for x in value)) + + if value in self._edge_aliases: + self._visible_edges = self._edge_aliases[value] + else: + if any(edge not in self._edges for edge in value): + raise ValueError( + 'Invalid edge param {}, must only be one of ' + '{} or string of {}'.format( + value, + ", ".join(self._edge_aliases), + ", ".join(self._edges))) + + self._visible_edges = value + + self.stale = True + + def get_path(self): + """Return a `.Path` for the `.visible_edges`.""" + codes = [Path.MOVETO] + + for edge in self._edges: + if edge in self._visible_edges: + codes.append(Path.LINETO) + else: + codes.append(Path.MOVETO) + + if Path.MOVETO not in codes[1:]: # All sides are visible + codes[-1] = Path.CLOSEPOLY + + return Path( + [[0.0, 0.0], [1.0, 0.0], [1.0, 1.0], [0.0, 1.0], [0.0, 0.0]], + codes, + readonly=True + ) + + +@cbook.deprecated('3.2', message='CustomCell functionality merged into Cell') +class CustomCell(Cell): + pass + + +class Table(Artist): + """ + A table of cells. + + The table consists of a grid of cells, which are indexed by (row, column). + + For a simple table, you'll have a full grid of cells with indices from + (0, 0) to (num_rows-1, num_cols-1), in which the cell (0, 0) is positioned + at the top left. However, you can also add cells with negative indices. + You don't have to add a cell to every grid position, so you can create + tables that have holes. + + *Note*: You'll usually not create an empty table from scratch. Instead use + `~matplotlib.table.table` to create a table from data. + """ + codes = {'best': 0, + 'upper right': 1, # default + 'upper left': 2, + 'lower left': 3, + 'lower right': 4, + 'center left': 5, + 'center right': 6, + 'lower center': 7, + 'upper center': 8, + 'center': 9, + 'top right': 10, + 'top left': 11, + 'bottom left': 12, + 'bottom right': 13, + 'right': 14, + 'left': 15, + 'top': 16, + 'bottom': 17, + } + """Possible values where to place the table relative to the Axes.""" + + FONTSIZE = 10 + + AXESPAD = 0.02 + """The border between the Axes and the table edge in Axes units.""" + + def __init__(self, ax, loc=None, bbox=None, **kwargs): + """ + Parameters + ---------- + ax : `matplotlib.axes.Axes` + The `~.axes.Axes` to plot the table into. + loc : str + The position of the cell with respect to *ax*. This must be one of + the `~.Table.codes`. + bbox : `.Bbox` or None + A bounding box to draw the table into. If this is not *None*, this + overrides *loc*. + + Other Parameters + ---------------- + **kwargs + `.Artist` properties. + """ + + Artist.__init__(self) + + if isinstance(loc, str): + if loc not in self.codes: + cbook.warn_deprecated( + "3.1", message="Unrecognized location {!r}. Falling back " + "on 'bottom'; valid locations are\n\t{}\n" + "This will raise an exception %(removal)s." + .format(loc, '\n\t'.join(self.codes))) + loc = 'bottom' + loc = self.codes[loc] + self.set_figure(ax.figure) + self._axes = ax + self._loc = loc + self._bbox = bbox + + # use axes coords + ax._unstale_viewLim() + self.set_transform(ax.transAxes) + + self._cells = {} + self._edges = None + self._autoColumns = [] + self._autoFontsize = True + self.update(kwargs) + + self.set_clip_on(False) + + def add_cell(self, row, col, *args, **kwargs): + """ + Create a cell and add it to the table. + + Parameters + ---------- + row : int + Row index. + col : int + Column index. + *args, **kwargs + All other parameters are passed on to `Cell`. + + Returns + ------- + cell : `.Cell` + The created cell. + + """ + xy = (0, 0) + cell = Cell(xy, visible_edges=self.edges, *args, **kwargs) + self[row, col] = cell + return cell + + def __setitem__(self, position, cell): + """ + Set a Cell in a given position. + """ + cbook._check_isinstance(Cell, cell=cell) + try: + row, col = position[0], position[1] + except Exception: + raise KeyError('Only tuples length 2 are accepted as coordinates') + cell.set_figure(self.figure) + cell.set_transform(self.get_transform()) + cell.set_clip_on(False) + self._cells[row, col] = cell + self.stale = True + + def __getitem__(self, position): + """Retrieve a cell from a given position.""" + return self._cells[position] + + @property + def edges(self): + """ + The default value of `~.Cell.visible_edges` for newly added + cells using `.add_cell`. + + Notes + ----- + This setting does currently only affect newly created cells using + `.add_cell`. + + To change existing cells, you have to set their edges explicitly:: + + for c in tab.get_celld().values(): + c.visible_edges = 'horizontal' + + """ + return self._edges + + @edges.setter + def edges(self, value): + self._edges = value + self.stale = True + + def _approx_text_height(self): + return (self.FONTSIZE / 72.0 * self.figure.dpi / + self._axes.bbox.height * 1.2) + + @allow_rasterization + def draw(self, renderer): + # docstring inherited + + # Need a renderer to do hit tests on mouseevent; assume the last one + # will do + if renderer is None: + renderer = self.figure._cachedRenderer + if renderer is None: + raise RuntimeError('No renderer defined') + + if not self.get_visible(): + return + renderer.open_group('table') + self._update_positions(renderer) + + for key in sorted(self._cells): + self._cells[key].draw(renderer) + + renderer.close_group('table') + self.stale = False + + def _get_grid_bbox(self, renderer): + """Get a bbox, in axes co-ordinates for the cells. + + Only include those in the range (0,0) to (maxRow, maxCol)""" + start_row = 0 + if self.has_column_labels: + start_row = -1 + boxes = [cell.get_window_extent(renderer) + for (row, col), cell in self._cells.items() + if row >= start_row and col >= 0] + bbox = Bbox.union(boxes) + + return bbox.inverse_transformed(self.get_transform()) + + def contains(self, mouseevent): + # docstring inherited + if self._contains is not None: + return self._contains(self, mouseevent) + + # TODO: Return index of the cell containing the cursor so that the user + # doesn't have to bind to each one individually. + renderer = self.figure._cachedRenderer + if renderer is not None: + boxes = [cell.get_window_extent(renderer) + for (row, col), cell in self._cells.items() + if row >= 0 and col >= 0] + bbox = Bbox.union(boxes) + return bbox.contains(mouseevent.x, mouseevent.y), {} + else: + return False, {} + + def get_children(self): + """Return the Artists contained by the table.""" + return list(self._cells.values()) + + def get_window_extent(self, renderer): + """Return the bounding box of the table in window coords.""" + self._update_positions(renderer) + boxes = [cell.get_window_extent(renderer) + for cell in self._cells.values()] + return Bbox.union(boxes) + + def _do_cell_alignment(self): + """ + Calculate row heights and column widths; position cells accordingly. + """ + # Calculate row/column widths + widths = {} + heights = {} + for (row, col), cell in self._cells.items(): + height = heights.setdefault(row, 0.0) + heights[row] = max(height, cell.get_height()) + width = widths.setdefault(col, 0.0) + widths[col] = max(width, cell.get_width()) + + # work out left position for each column + xpos = 0 + lefts = {} + for col in sorted(widths): + lefts[col] = xpos + xpos += widths[col] + + ypos = 0 + bottoms = {} + for row in sorted(heights, reverse=True): + bottoms[row] = ypos + ypos += heights[row] + + # set cell positions + for (row, col), cell in self._cells.items(): + cell.set_x(lefts[col]) + cell.set_y(bottoms[row]) + + def auto_set_column_width(self, col): + """ + Automatically set the widths of given columns to optimal sizes. + + Parameters + ---------- + col : int or sequence of ints + The indices of the columns to auto-scale. + """ + # check for col possibility on iteration + try: + iter(col) + except (TypeError, AttributeError): + self._autoColumns.append(col) + else: + for cell in col: + self._autoColumns.append(cell) + + self.stale = True + + def _auto_set_column_width(self, col, renderer): + """Automatically set width for column.""" + cells = [cell for key, cell in self._cells.items() if key[1] == col] + max_width = max((cell.get_required_width(renderer) for cell in cells), + default=0) + for cell in cells: + cell.set_width(max_width) + + def auto_set_font_size(self, value=True): + """Automatically set font size. + + Set flag which triggers automatic font size selection. + """ + self._autoFontsize = value + self.stale = True + + def _auto_set_font_size(self, renderer): + + if len(self._cells) == 0: + return + fontsize = next(iter(self._cells.values())).get_fontsize() + + grow = self._bbox is not None + + for key, cell in self._cells.items(): + # ignore auto-sized columns + if key[1] in self._autoColumns: + continue + + # set initial guess at cell font size + cell.set_fontsize(fontsize) + + size = cell.auto_set_font_size(renderer, grow=grow) + + # no point in trying bigger font after first + if grow: + grow = False + fontsize = size + else: + fontsize = min(fontsize, size) + + # now set all fontsizes equal + self.set_fontsize(fontsize) + + return fontsize + + def scale(self, xscale, yscale): + """Scale column widths by *xscale* and row heights by *yscale*.""" + for c in self._cells.values(): + c.set_width(c.get_width() * xscale) + c.set_height(c.get_height() * yscale) + + def set_fontsize(self, size): + """ + Set the font size, in points, of the cell text. + + Parameters + ---------- + size : float + + Notes + ----- + As long as auto font size has not been disabled, the value will be + clipped such that the text fits horizontally into the cell. + + You can disable this behavior using `.auto_set_font_size`. + + >>> the_table.auto_set_font_size(False) + >>> the_table.set_fontsize(20) + + """ + for cell in self._cells.values(): + cell.set_fontsize(size) + self.stale = True + + def _offset(self, ox, oy): + """Move all the artists by ox, oy (axes coords).""" + for c in self._cells.values(): + x, y = c.get_x(), c.get_y() + c.set_x(x + ox) + c.set_y(y + oy) + + def _update_positions(self, renderer): + # called from renderer to allow more precise estimates of + # widths and heights with get_window_extent + + if self._autoFontsize: + self._auto_set_font_size(renderer) + + # Do any auto width setting + for col in self._autoColumns: + self._auto_set_column_width(col, renderer) + + # Align all the cells + self._do_cell_alignment() + + bbox = self._get_grid_bbox(renderer) + l, b, w, h = bbox.bounds + + if self._bbox is not None: + # Position according to bbox + rl, rb, rw, rh = self._bbox + + self.scale(rw / w, rh / h) + + # Re-align all the cells + self._do_cell_alignment() + + ox = rl - l + oy = rb - b + else: + # Position using loc + (BEST, UR, UL, LL, LR, CL, CR, LC, UC, C, + TR, TL, BL, BR, R, L, T, B) = range(len(self.codes)) + # defaults for center + ox = (0.5 - w / 2) - l + oy = (0.5 - h / 2) - b + if self._loc in (UL, LL, CL): # left + ox = self.AXESPAD - l + if self._loc in (BEST, UR, LR, R, CR): # right + ox = 1 - (l + w + self.AXESPAD) + if self._loc in (BEST, UR, UL, UC): # upper + oy = 1 - (b + h + self.AXESPAD) + if self._loc in (LL, LR, LC): # lower + oy = self.AXESPAD - b + if self._loc in (LC, UC, C): # center x + ox = (0.5 - w / 2) - l + if self._loc in (CL, CR, C): # center y + oy = (0.5 - h / 2) - b + + if self._loc in (TL, BL, L): # out left + ox = - (l + w) + if self._loc in (TR, BR, R): # out right + ox = 1.0 - l + if self._loc in (TR, TL, T): # out top + oy = 1.0 - b + if self._loc in (BL, BR, B): # out bottom + oy = - (b + h) + + self._offset(ox, oy) + + def get_celld(self): + r""" + Return a dict of cells in the table mapping *(row, column)* to + `.Cell`\s. + + Notes + ----- + You can also directly index into the Table object to access individual + cells:: + + cell = table[row, col] + + """ + return self._cells + + +docstring.interpd.update(Table=artist.kwdoc(Table)) + + +@docstring.dedent_interpd +def table(ax, + cellText=None, cellColours=None, + cellLoc='right', colWidths=None, + rowLabels=None, rowColours=None, rowLoc='left', + colLabels=None, colColours=None, colLoc='center', + loc='bottom', bbox=None, edges='closed', + edgeColour=None, + cellEdgeColours=None, + rowEdgeColours=None, + colEdgeColours=None, + **kwargs): + """ + Add a table to an `~.axes.Axes`. + + At least one of *cellText* or *cellColours* must be specified. These + parameters must be 2D lists, in which the outer lists define the rows and + the inner list define the column values per row. Each row must have the + same number of elements. + + The table can optionally have row and column headers, which are configured + using *rowLabels*, *rowColours*, *rowLoc* and *colLabels*, *colColours*, + *colLoc* respectively. + + For finer grained control over tables, use the `.Table` class and add it to + the axes with `.Axes.add_table`. + + Parameters + ---------- + cellText : 2D list of str, optional + The texts to place into the table cells. + + *Note*: Line breaks in the strings are currently not accounted for and + will result in the text exceeding the cell boundaries. + + cellColours : 2D list of colors, optional + The background colors of the cells. + + cellLoc : {'left', 'center', 'right'}, default: 'right' + The alignment of the text within the cells. + + colWidths : list of float, optional + The column widths in units of the axes. If not given, all columns will + have a width of *1 / ncols*. + + rowLabels : list of str, optional + The text of the row header cells. + + rowColours : list of colors, optional + The colors of the row header cells. + + rowLoc : {'left', 'center', 'right'}, optional, default: 'left' + The text alignment of the row header cells. + + colLabels : list of str, optional + The text of the column header cells. + + colColours : list of colors, optional + The colors of the column header cells. + + rowLoc : {'left', 'center', 'right'}, optional, default: 'left' + The text alignment of the column header cells. + + loc : str, optional + The position of the cell with respect to *ax*. This must be one of + the `~.Table.codes`. + + bbox : `.Bbox`, optional + A bounding box to draw the table into. If this is not *None*, this + overrides *loc*. + + edges : substring of 'BRTL' or {'open', 'closed', 'horizontal', 'vertical'} + The cell edges to be drawn with a line. See also + `~.Cell.visible_edges`. + + edgeColour : default color for cell edges. + + rowEdgeColours : list of colors, optional + The colors of the edges of the row header cells. + + colEdgeColours : list of colors, optional + The colors of the edges of the column header cells. + + cellEdgeColours : 2D list of colors, optional + The colors of the edges of the cells. + + Other Parameters + ---------------- + **kwargs + `.Table` properties. + + %(Table)s + + Returns + ------- + table : `~matplotlib.table.Table` + The created table. + """ + if cellColours is None and cellText is None: + raise ValueError('At least one argument from "cellColours" or ' + '"cellText" must be provided to create a table.') + + # Check we have some cellText + if cellText is None: + # assume just colours are needed + rows = len(cellColours) + cols = len(cellColours[0]) + cellText = [[''] * cols] * rows + + rows = len(cellText) + cols = len(cellText[0]) + for row in cellText: + if len(row) != cols: + raise ValueError( + f"Each row in 'cellText' must have {cols} columns") + + if cellColours is not None: + if len(cellColours) != rows: + raise ValueError(f"'cellColours' must have {rows} rows") + for row in cellColours: + if len(row) != cols: + raise ValueError( + "Each row in 'cellColours' must have {cols} columns") + else: + cellColours = ['w' * cols] * rows + + if edgeColour is None: + # default edge color is black + edgeColour = 'k' + + if cellEdgeColours is not None: + if len(cellEdgeColours) != rows: + raise ValueError( + f"'cellEdgeColours' must have {rows} rows") + for row in cellEdgeColours: + if len(row) != cols: + raise ValueError( + f"Each row in 'cellColours' must have {cols} columns") + else: + # default is all black cell edge colours + cellEdgeColours = [[edgeColour] * cols] * rows + + # Set colwidths if not given + if colWidths is None: + colWidths = [1.0 / cols] * cols + + # Fill in missing information for column + # and row labels + rowLabelWidth = 0 + if rowLabels is None: + if rowColours is not None: + rowLabels = [''] * rows + rowLabelWidth = colWidths[0] + elif rowColours is None: + rowColours = 'w' * rows + + if rowLabels is not None: + if len(rowLabels) != rows: + raise ValueError(f"'rowLabels' must be of length {rows}") + + if rowEdgeColours is None: + rowEdgeColours = [edgeColour] * rows + elif len(rowEdgeColours) != rows: + raise ValueError(f"'rowEdgeColours' must be of length {rows}") + + if colLabels is None: + if colColours is not None: + colLabels = [''] * cols + elif colColours is None: + colColours = 'w' * cols + + if colEdgeColours is None: + colEdgeColours = [edgeColour] * cols + elif len(colEdgeColours) != cols: + raise ValueError(f"'colEdgeColours' must be of length {cols}") + + # Now create the table + table = Table(ax, loc, bbox, **kwargs) + table.edges = edges + + if table._bbox: + height = 1.0 / rows + else: + height = table._approx_text_height() + + # Add the cells + for row in range(rows): + for col in range(cols): + table.add_cell(row, col, + width=colWidths[col], height=height, + text=cellText[row][col], + facecolor=cellColours[row][col], + edgecolor=cellEdgeColours[row][col], + loc=cellLoc) + # Do column labels + table.has_column_labels = False + if colLabels is not None: + table.has_column_labels = True + for col in range(cols): + table.add_cell(-1, col, + width=colWidths[col], height=height, + text=colLabels[col], facecolor=colColours[col], + edgecolor=colEdgeColours[col], + loc=colLoc) + + # Do row labels + if rowLabels is not None: + for row in range(rows): + table.add_cell(row, -1, + width=rowLabelWidth or 1e-15, height=height, + text=rowLabels[row], facecolor=rowColours[row], + edgecolor=rowEdgeColours[row], + loc=rowLoc) + if rowLabelWidth == 0: + table.auto_set_column_width(-1) + + ax.add_table(table) + return table From 11af1a08e25275ed22c89d62db2c5dceb48fc337 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 3 Jul 2019 17:10:17 -0400 Subject: [PATCH 535/642] more gamma ray burst and gravity wave fun --- docs/nodice/plates.rst | 92 ++++++++++++++++++++++++++++++++++++++++++ karmapi/pigfarm.py | 5 ++- 2 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 docs/nodice/plates.rst diff --git a/docs/nodice/plates.rst b/docs/nodice/plates.rst new file mode 100644 index 0000000..85796b2 --- /dev/null +++ b/docs/nodice/plates.rst @@ -0,0 +1,92 @@ +===================== + Plate like rotation +===================== + +Colin Rourke's, "Another Paradigm for the Universe", has a new +edition:: + + The characteristic rotation curves for spiral galaxies have an + inner plate like rotation, whereby angular velocity is the same, + but tangential velocity is proportional to *r* times *\omega*. + + +So I am working through this land once more. It's a mysterious place +with lots of curiousities and occasional flashes where it all makes +sense, just briefly, before descending and spiralling in inward +circles. + +To some centre of mass, a local meeting place. Whirring around at +the edge of the plate, trying to hang on and surf the waves. + +What follows is often quite dramatic, as it seems to gather pace away +from the centre, having broken its ties. In fact, much of the +perceived motion is the constant angular velocity of the inner plate, +as it seems to zoom past. + +Some masses may be rotating rapidly, this seems to give them some +stability, but will tend to unwind as it moves away from the central +mass. + +To a new level far from the core, before blending with its surrounings +and drifting through the spirals. + +A large and caught in a vortex, spinning madly, until it gets a tad +off-centre and away to the outer galaxy. + +I am looking at a pool, with a jet a foot or so below the surface. + +From time to time I see vortices forming, always rotating the same +way. + +Closer inspection shows a veritable galactic rotation curve. + +Watch a little longer and there is an and at the centre of the vortex. + +It's a bit ant, around 1.5cm long. And it is spinning like mad with +the same angular velocity as the rest of the vortex. + +Sometimes there is a wobble and the and gets off centre, spinning +rapidly. + +It rapidly spirals outwards, with its rotation decreasing in the +process, in effect trading angular momentum to potential energy. + +Perhaps even enough to be ejected from the galaxy. + +Angular momentum? Inertial dragging by giant black holes. + +What does it have to do with the detections of gravitational waves and +the mysterious gravitational waves. + +Is it possible that the time interval between observing a new galaxy +arriving at the edge of our visible universe and the detection of a +gravitational wave from the same, rises as the mass of the black hole +does. + +The key observation is the extent to which the black hole can slow +down time, or rather the distance at which its inertial drag on time +is no longer notable. + +So it is possible that the time interval in between a gamma ray burst +and the detection of the gravity wave from same rises as the central +mass does, posibly rather significantly. + +An excellent source of information on gravitational wave information +for the current operational run can be found here:: + + https://gcn.gsfc.nasa.gov/selected.html + + +It also records gamma ray detections. GCN is a global alert network +so telescopes can react when a gravity wave is detected. + +June was a curious month. An event at the beginning, then nothing +until right at the end, now July has already provided another. + +I've read some papers discussing various aspects of the parameters +that are being assumed for each detection. + +One paper was suggesting we may be seeing reflections from the sun (I +tend to think this is likely, with also interference from Jupiter.) + +But baby steps. diff --git a/karmapi/pigfarm.py b/karmapi/pigfarm.py index 8675ca4..8504907 100644 --- a/karmapi/pigfarm.py +++ b/karmapi/pigfarm.py @@ -668,7 +668,7 @@ def draw_table( """ Draw a table on the axes """ from matplotlib import colors, cm, table - from karmapi.table import table + from mpltable.table import table norm = colors.Normalize() stats, cells, rows, cols = self.frame_to_stats(data) @@ -696,7 +696,8 @@ def draw_table( cellText=cells, cellColours=colours, cellEdgeColours=colours, - edges=['clos', 'ed'], + edges=['TL'], + max_col_label_width=0.1, bbox=bbox, loc=loc) From dee791f825d98595290ee9a9b1b6d1de7226d2e6 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 6 Jul 2019 16:50:36 -0400 Subject: [PATCH 536/642] trying to find my way round ncdf. need a new name --- karmapi/ncdf.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 06dd0ed..67bbce8 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -16,25 +16,24 @@ from random import randint +from karmapi import base, tpot, cpr, pigfarm + import netCDF4 import numpy as np import curio +import pyshtools + from matplotlib import pyplot from matplotlib.pyplot import show, imshow, title, colorbar -from karmapi import base, sonogram, tpot, cpr, pigfarm def load(path): return netCDF4.Dataset(path) -def images(path, folder): - - df = load(path) - def current_epoch(): return datetime.datetime(1900, 1, 1) @@ -53,7 +52,6 @@ def stamps_to_datetime(stamps, epoch=None): for stamp in stamps: yield epoch + datetime.timedelta(hours=int(stamp)) - def generate_data(stamps, values, epoch=None): @@ -278,12 +276,9 @@ def __getstate__(self): state.update(dict(stamps=None, values=None)) return state - def update(self, ball): - - super().update(ball) - + def show_date(self): + print(self.current_date()) - self.next_frame() def tick(self): @@ -295,6 +290,15 @@ def tick(self): return self + async def run(self): + + while True: + self.tick() + + self.next_frame() + await curio.sleep(self.sleep) + + def current(self): s, d, ix = self.stamps[self.ix] From 51113c95aab6e248686bf7e4d1bb81ed9141d4b3 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 6 Jul 2019 17:42:27 -0400 Subject: [PATCH 537/642] ncdf natural curcular data field? Cancel new name --- karmapi/cpr.py | 27 +++++++++++++++++++++++---- karmapi/ncdf.py | 27 +++++++++++++++++---------- 2 files changed, 40 insertions(+), 14 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index c222e52..89acefb 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -341,7 +341,7 @@ def lowhemi(self, pixels): return self.poleview(pixels, wind=-1) - async def run(self): + async def run(self, elsewhere=False): """Run the sphere Really want to just add to queue and let something else @@ -362,22 +362,41 @@ async def run(self): should something else supervise when balls run? + Latest arun() run here, prun() try another process. + + elsewhere decides which, default here. """ + if elsewhere: + return await self.prun() + + return await self.arun() + + async def arun(self): + """ Run in current process """ + while True: + self.tick() + await curio.sleep(self.sleep()) + + + async def prun(self): + while True: + if not self.paused: ball = await curio.run_in_process(self.tick) #print(f'{self} sleep:{self.sleep}') - self.update(ball) + # hack, just move stuff around + self.post_run_update(ball) #ball = await tick.join() #print('joined', ball, self.sleep) await curio.sleep(self.sleep) - def update(self, ball): - + def post_run_update(self, ball): + """ Hack running in process """ self.rgb = ball.rgb self.t = ball.t diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 67bbce8..1540d79 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -8,6 +8,16 @@ n c d f natural circular data field? + +OK time for an update. + +I discovered *pyshtools* in my explorations. + +Spherical harmonic analysis. Fourier transforms for spheres. + +Explore global harmonics. + +But first I need to unravel what is here. """ import datetime import math @@ -271,7 +281,7 @@ def sample_points(self): def __getstate__(self): - """ """ + """ Don't try and save stamps or values """ state = self.__dict__.copy() state.update(dict(stamps=None, values=None)) return state @@ -288,16 +298,9 @@ def tick(self): im = self.project() im.save(f'{self.save}/{now}.png') - return self - - async def run(self): - - while True: - self.tick() - - self.next_frame() - await curio.sleep(self.sleep) + self.next_frame() + return self def current(self): @@ -416,6 +419,10 @@ def __init__(self, parent, stamps=None, values=None, super().__init__(parent, balls=balls, **kwargs) + + + + def argument_parser(parser=None): parser = cpr.argument_parser(parser) From 8aecdbce8927bccc63f8b78263d16e5c7cd6999f Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 7 Jul 2019 14:36:40 -0400 Subject: [PATCH 538/642] why is it working so hard ncdf? --- karmapi/cpr.py | 2 +- karmapi/ncdf.py | 3 ++- karmapi/pigfarm.py | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 89acefb..0cb8949 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -376,7 +376,7 @@ async def arun(self): """ Run in current process """ while True: self.tick() - await curio.sleep(self.sleep()) + await curio.sleep(self.sleep) async def prun(self): diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 1540d79..8ccbfa1 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -452,7 +452,7 @@ def __init__(self, args): stamps = self.df.variables['time'] self.values = self.df.variables[args.value] - print(self.df.variables) + print(self.df.variables.keys()) self.stamps = stamp_sort(stamps) @@ -494,6 +494,7 @@ def __init__(self, args): spheres = cpr.args_to_spheres(args) + print(f'Number of spheres {len(spheres)}') parms = dict(stamps=cf.stamps, values=cf.values, save=args.save, balls=spheres) diff --git a/karmapi/pigfarm.py b/karmapi/pigfarm.py index 8504907..b3d5371 100644 --- a/karmapi/pigfarm.py +++ b/karmapi/pigfarm.py @@ -112,7 +112,7 @@ async def build(self): while True: meta, kwargs = await self.builds.get() - print('building piglet:', meta, kwargs) + print('building piglet:', meta, kwargs.keys()) piglet = meta(self.toplevel(), **kwargs) From 49708704a5a08be780a2dccc049e394adf9215f7 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 7 Jul 2019 14:45:28 -0400 Subject: [PATCH 539/642] make cpr sphere run default to another process --- karmapi/cpr.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 0cb8949..0b3f2c3 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -341,7 +341,7 @@ def lowhemi(self, pixels): return self.poleview(pixels, wind=-1) - async def run(self, elsewhere=False): + async def run(self, elsewhere=True): """Run the sphere Really want to just add to queue and let something else From fb7478100521659861952679592962187ebbf37d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 8 Jul 2019 19:24:55 -0400 Subject: [PATCH 540/642] sha in ncdf land hack --- karmapi/cpr.py | 9 ++++++++- karmapi/ncdf.py | 52 ++++++++++++++++++++++++++++++++++++------------- 2 files changed, 46 insertions(+), 15 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 0b3f2c3..57c69c3 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -376,6 +376,7 @@ async def arun(self): """ Run in current process """ while True: self.tick() + self.post_tick() await curio.sleep(self.sleep) @@ -389,6 +390,8 @@ async def prun(self): # hack, just move stuff around self.post_run_update(ball) + self.post_tick() + #ball = await tick.join() #print('joined', ball, self.sleep) @@ -400,7 +403,11 @@ def post_run_update(self, ball): self.rgb = ball.rgb self.t = ball.t - + + + def post_tick(self): + """ Do any post tick stuff that is not cpu blocking """ + pass def tick(self): """ Do one tick for the sphere diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 8ccbfa1..d45b740 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -69,9 +69,7 @@ def generate_data(stamps, values, epoch=None): for ix, stamp in enumerate(stamps): - date = epoch + datetime.timedelta(hours=int(stamp)) - - yield values[ix], date + yield values[ix], stamp @@ -298,9 +296,13 @@ def tick(self): im = self.project() im.save(f'{self.save}/{now}.png') + return self + + + def post_tick(self): + """ stuff that has to happen on this processor """ self.next_frame() - return self def current(self): @@ -318,27 +320,41 @@ def current_date(self): def next_frame(self): + red = self.current() + print(f'RED SHAPE {red.shape}') + red = to_sha(red[1:]) + print(f'RED SHAPE {red.shape}') + red = red.flatten() + print(f'RED SHAPE {red.shape}') - red = self.scale(self.current()) - red = red[self.spin:] + red[0:self.spin] + red = np.concatenate((red[self.spin:], red[0:self.spin])) self.forward() - green = self.scale(self.current()) - green = green[self.spin:] + green[0:self.spin] + green = self.current() + green = to_sha(green[1:]) + green = green.flatten() + green = np.concatenate((green[self.spin:], green[0:self.spin])) self.forward() - blue = self.scale(self.current()) - blue = blue[self.spin:] + blue[0:self.spin] + blue = self.current() + blue = to_sha(blue[1:]) + blue = blue.flatten() + blue = np.concatenate((blue[self.spin:], blue[0:self.spin])) + + self.rgb = np.array(list(zip(red, + green, + blue))) self.spin += 5 self.spin %= self.size[0] - - self.rgb = np.array(list(zip(red, green, blue))) + + #print(red[0][50]) + #print(red[1][50]) height, width = self.size - self.rgb.resize((height, width, 3)) + self.rgb.resize((height-1, width, 3)) - self.sample_current() + #self.sample_current() self.forward() @@ -391,6 +407,14 @@ def scale(self, data): return data +def to_sha(data): + + from pyshtools.expand import SHExpandDH + + print(data.shape) + return SHExpandDH(data, sampling=2) + + class World(cpr.NestedWaves): def __init__(self, parent, stamps=None, values=None, From ac99b3672e62d2f55ffb26f9be83c5112fa4158b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 8 Jul 2019 22:04:25 -0400 Subject: [PATCH 541/642] starting to get the hang of pyshtools --- karmapi/sha.py | 102 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 karmapi/sha.py diff --git a/karmapi/sha.py b/karmapi/sha.py new file mode 100644 index 0000000..d8f8cd4 --- /dev/null +++ b/karmapi/sha.py @@ -0,0 +1,102 @@ + +from karmapi import ncdf + +import pyshtools + +from matplotlib import pyplot as plt + +import numpy as np + +import datetime + +def spectrum(value): + + + clm = ncdf.to_sha(value[1:]) + + return clm, pyshtools.spectralanalysis.spectrum(clm) + + +def main(): + + parser = ncdf.argument_parser() + + args = parser.parse_args() + + df = ncdf.CircularField(args) + + last = None + + spectra = [] + for value, stamp in ncdf.generate_data(df.stamps, df.values): + ss, date, ix = stamp + print(date) + + if last is None: + last = value + continue + + delta = last - value + + clm, spect = spectrum(delta) + spectra.append(spect) + + print(f'SPECT {spect.cumsum()/spect.sum()}') + + if date >= datetime.datetime(1990, 1, 1): + break + + #continue + + plt.plot(spect.cumsum()/spect.sum()) + plt.grid(True) + plt.show() + + + grid = pyshtools.SHCoeffs.from_random(spect).expand() + plt.subplot(1, 3, 1) + plt.imshow(grid.to_array()) + + plt.subplot(1, 3, 2) + plt.imshow(delta) + + print(type(clm)) + #clm[:,:,20:] = 0.0 + fgrid = pyshtools.expand.MakeGridDH(clm) + plt.subplot(1, 3, 3) + plt.imshow(fgrid) + break + + #plt.plot(power[3:]) + #plt.grid(True) + #plt.plot(power) + + plt.title(date) + plt.imshow(grid) + break + + last = value + + if ix >= 12: + break + + + + plt.show() + + sp = np.array(spectra) + + print(sp.mean(axis=0)) + print(sp.var(axis=0)) + print(sp.shape) + + + +if __name__ == '__main__': + + main() + #parser = ncdf.argument_parser() + + #args = parser.parse_args() + + #df = ncdf.CircularField(args) From 5a2d6e7f7da49d6e6ef4a160716ac79abfcb9968 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 10 Jul 2019 19:45:26 -0400 Subject: [PATCH 542/642] working on a simple harmonic tpot --- karmapi/ncdf.py | 2 +- karmapi/sha.py | 157 ++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 153 insertions(+), 6 deletions(-) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index d45b740..03a6a42 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -411,7 +411,7 @@ def to_sha(data): from pyshtools.expand import SHExpandDH - print(data.shape) + #print(data.shape) return SHExpandDH(data, sampling=2) diff --git a/karmapi/sha.py b/karmapi/sha.py index d8f8cd4..bd3fa1f 100644 --- a/karmapi/sha.py +++ b/karmapi/sha.py @@ -1,5 +1,5 @@ -from karmapi import ncdf +from karmapi import ncdf, tpot import pyshtools @@ -8,6 +8,7 @@ import numpy as np import datetime +from collections import Counter def spectrum(value): @@ -17,13 +18,26 @@ def spectrum(value): return clm, pyshtools.spectralanalysis.spectrum(clm) -def main(): +def generate_spectra(df): - parser = ncdf.argument_parser() + spectra = [] + last = None + for value, stamp in ncdf.generate_data(df.stamps, df.values): + ss, date, ix = stamp - args = parser.parse_args() + if last is None: + last = value + continue - df = ncdf.CircularField(args) + delta = last - value + + clm, spect = spectrum(delta) + spectra.append(spect) + + return spectra + + +def plots(df): last = None @@ -90,6 +104,139 @@ def main(): print(sp.var(axis=0)) print(sp.shape) +def stats(data): + """ Return some standard stats """ + print(data.shape) + print(data.mean()) + print(data.var()) + print(np.percentile(data.cumsum(), [0.25, 0.5, 0.75, 0.9, 0.99])) + + means = data.mean(axis=0) + print(f'means: {means.shape}') + stds = data.std(axis=0) + print(f'stds: {stds.shape}') + + for x in range(12): + print(means[10*x:10 + (10 * x)]) + print() + + +def random_sample(data, n): + + norm = np.random.normal + means = data.mean(axis=0) + stds = data.std(axis=0) + + shape = [n] + list(means.shape) + return norm(size=shape) + + # old code below scales to original distro + print(samp.shape) + + samp *= stds + samp += means + + return samp + +def normalise(data): + + means = data.mean(axis=0) + stds = data.std(axis=0) + + data -= means + data /=stds + + return data + + +def stamp_stats(stamps): + + dates = [x[1] for x in stamps] + hours = Counter(x.hour for x in dates) + hhours = Counter(x.hour for x in dates[:int(len(dates)/2)]) + months = Counter((x.year, x.month) for x in dates) + + print(hours) + print(hhours) + print(months) + +def brew(spectra, nstates=10): + """ Perform tpot algorithm """ + + sample = random_sample(spectra, nstates) + + # calculate probs given observations + B = np.zeros(size=(nstates, len(spectra))) + + for spect in spectra: + = 0.0 + for ss, state in enumerate(sample): + dist = spect.dot(ss) + distance + + distance /= (ss + 1) ** 0.5 + + # FIXME? need to convert distance to prob + # but teapot will deal with any linear scaling + # so prob e ** x or log(x) here ... or all ok? + + + # need to turn spectra into observations (tpot states) + + + # generate random eh? + A = np.random.random(size=(nstates, nstates)) + + P0 = np.random.random(size=nstates) + + tpot.A = A + tpot.B = B + tpot.P0 = P0 + + # Now need to turn our observations into states + # ... need to figure that one out + + tpot.OBSERVATIONS = observations + + tpot.brew() + + + + + + + +def main(): + + parser = ncdf.argument_parser() + + parser.add_argument('--plot', action='store_true') + + args = parser.parse_args() + + df = ncdf.CircularField(args) + + if args.plot: + plots(df) + return + + stamp_stats(df.stamps) + spectra = np.array(generate_spectra(df)) + + # fixme - save spectra somewhere and do faster load. + # cf repeatability too. + + stats(spectra) + + # maybe just normalise spectra? + nspectra = normalise(spectra) + stats(nspectra) + + sample = random_sample(spectra, 10) + + stats(sample) + + brew(nspectra, 10) if __name__ == '__main__': From 1695d001610b2f8de0bd2627e6c04585dff7ee5d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 12 Jul 2019 14:56:29 -0400 Subject: [PATCH 543/642] sha gets as far as first brew --- karmapi/sha.py | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/karmapi/sha.py b/karmapi/sha.py index bd3fa1f..34f5788 100644 --- a/karmapi/sha.py +++ b/karmapi/sha.py @@ -166,23 +166,26 @@ def brew(spectra, nstates=10): sample = random_sample(spectra, nstates) # calculate probs given observations - B = np.zeros(size=(nstates, len(spectra))) - - for spect in spectra: - = 0.0 - for ss, state in enumerate(sample): + B = np.zeros(shape=(len(spectra), nstates), dtype=float) + observations = [] + for obs, spect in enumerate(spectra): + observations.append(obs) + + for state, ss in enumerate(sample): dist = spect.dot(ss) - distance - distance /= (ss + 1) ** 0.5 + #print(obs, state, dist) + B[obs, state] = (abs(dist) ** 0.5) + + + + #distance /= (ss + 1) ** 0.5 # FIXME? need to convert distance to prob # but teapot will deal with any linear scaling # so prob e ** x or log(x) here ... or all ok? - # need to turn spectra into observations (tpot states) - # generate random eh? A = np.random.random(size=(nstates, nstates)) @@ -195,16 +198,19 @@ def brew(spectra, nstates=10): # Now need to turn our observations into states # ... need to figure that one out + # need to turn spectra into observations (tpot states) + # In fact, + tpot.OBSERVATIONS = observations - + + print('TPOT filled, away we go') tpot.brew() - - - - - + for x in tpot.GAMMA[:10]: + print(f'Gamma: {x}') + + # Now need to write code to re-estimate A, B and states. def main(): From 9d7b5e18b8f5c96d1640742831e35879a40766f6 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 12 Jul 2019 16:02:28 -0400 Subject: [PATCH 544/642] sha tpot with added plots --- karmapi/sha.py | 75 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 62 insertions(+), 13 deletions(-) diff --git a/karmapi/sha.py b/karmapi/sha.py index 34f5788..a702caf 100644 --- a/karmapi/sha.py +++ b/karmapi/sha.py @@ -160,32 +160,37 @@ def stamp_stats(stamps): print(hhours) print(months) -def brew(spectra, nstates=10): - """ Perform tpot algorithm """ - - sample = random_sample(spectra, nstates) - +def make_bmatrix(spectra, states): + """ """ + nstates = len(states) # calculate probs given observations B = np.zeros(shape=(len(spectra), nstates), dtype=float) + observations = [] for obs, spect in enumerate(spectra): observations.append(obs) - for state, ss in enumerate(sample): + for state, ss in enumerate(states): dist = spect.dot(ss) + #distance /= (ss + 1) ** 0.5 + + # FIXME? need to convert distance to prob + # but teapot will deal with any linear scaling + # so prob e ** x or log(x) here ... or all ok? + #print(obs, state, dist) B[obs, state] = (abs(dist) ** 0.5) - + return observations, B - #distance /= (ss + 1) ** 0.5 - # FIXME? need to convert distance to prob - # but teapot will deal with any linear scaling - # so prob e ** x or log(x) here ... or all ok? - +def brew(spectra, nstates=10): + """ Perform tpot algorithm """ + sample = random_sample(spectra, nstates) + + observations, B = make_bmatrix(spectra, sample) # generate random eh? A = np.random.random(size=(nstates, nstates)) @@ -205,13 +210,57 @@ def brew(spectra, nstates=10): tpot.OBSERVATIONS = observations print('TPOT filled, away we go') - tpot.brew() + nsteps = 10 + for step in range(nsteps): + + tpot.brew() + + print(f'Step {step} score {tpot.SCORE}') + + # re-estimage A, B, P0 + rebrew(spectra, nstates) + + tpot.beer() + tpot.stir() + + bottom = np.zeros(len(spectra)) + index = list(range(len(spectra))) + for i in range(nstates): + plt.bar(index, tpot.GAMMA[:, i], bottom=bottom) + bottom += tpot.GAMMA[:, i] + plt.show() + for x in tpot.GAMMA[:10]: print(f'Gamma: {x}') # Now need to write code to re-estimate A, B and states. +def lager(spectra, nstates): + """ Generate new set of states using tpot.GAMMA """ + + states = np.zeros(shape=(nstates, len(spectra[0])), dtype=float) + + for obs, gam in zip(spectra, tpot.GAMMA): + for state in range(nstates): + states[state] += gam[state] * obs + + for i in range(nstates): + states[i] /= sum(tpot.GAMMA[:, i]) + + return states + +def rebrew(spectra, nstates): + """ Do re-estimation """ + # re-estimate states based on gamma + states = lager(spectra, nstates) + + observations, B = make_bmatrix(spectra, states) + + tpot.B = B + tpot.OBSERVATIONS = observations + + def main(): parser = ncdf.argument_parser() From b2df7ae8c8a312b47f3a5ae17ae4f4a5f18aa3db Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 13 Jul 2019 10:12:29 -0400 Subject: [PATCH 545/642] plot A matrix as well as gamma in sha --- karmapi/ncdf.py | 2 +- karmapi/sha.py | 62 +++++++++++++++++++++++++++++++++++-------------- 2 files changed, 46 insertions(+), 18 deletions(-) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 03a6a42..12ab74e 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -183,7 +183,7 @@ def delta(stamps, values): data -= out #xx = pyplot.subplot(8, 4, 1 + x - window) - #xx.set_axis_off()ga + #xx.set_axis_off() print(f'{dt[48*ix]} {data.mean()}, {data.max()}, {data.min()}') xx = imshow(data / window, vmin=-3, vmax=3, cmap='rainbow') diff --git a/karmapi/sha.py b/karmapi/sha.py index a702caf..0f435cd 100644 --- a/karmapi/sha.py +++ b/karmapi/sha.py @@ -4,6 +4,7 @@ import pyshtools from matplotlib import pyplot as plt +from blume.table import table import numpy as np @@ -22,6 +23,7 @@ def generate_spectra(df): spectra = [] last = None + lastdate = None for value, stamp in ncdf.generate_data(df.stamps, df.values): ss, date, ix = stamp @@ -34,6 +36,10 @@ def generate_spectra(df): clm, spect = spectrum(delta) spectra.append(spect) + if lastdate and lastdate > date: + break + lastdate = date + return spectra @@ -201,16 +207,10 @@ def brew(spectra, nstates=10): tpot.B = B tpot.P0 = P0 - # Now need to turn our observations into states - # ... need to figure that one out - # need to turn spectra into observations (tpot states) - # In fact, - - tpot.OBSERVATIONS = observations print('TPOT filled, away we go') - nsteps = 10 + nsteps = 100 for step in range(nsteps): tpot.brew() @@ -218,23 +218,50 @@ def brew(spectra, nstates=10): print(f'Step {step} score {tpot.SCORE}') # re-estimage A, B, P0 - rebrew(spectra, nstates) - tpot.beer() + rebrew(spectra, nstates) tpot.stir() - bottom = np.zeros(len(spectra)) - index = list(range(len(spectra))) - for i in range(nstates): - plt.bar(index, tpot.GAMMA[:, i], bottom=bottom) - bottom += tpot.GAMMA[:, i] - plt.show() - + if step % 25 == 0: + print(tpot.A) + gamma_plot() + + gamma_plot() for x in tpot.GAMMA[:10]: print(f'Gamma: {x}') - # Now need to write code to re-estimate A, B and states. + +def gamma_plot(): + + T, nstates = tpot.GAMMA.shape + + bottom = np.zeros(T, dtype=float) + index = list(range(T)) + fig = plt.figure() + ax = fig.add_subplot(211) + data = tpot.GAMMA + print(f'data shape {data.shape}') + for i in range(nstates): + ax.bar(index, data[:, i], bottom=bottom) + bottom += data[:, i] + + + from matplotlib import colors, cm + norm = colors.Normalize() + + colours = cm.get_cmap()(norm(tpot.A)) + alpha = 0.2 + colours[:, :, 3] = alpha + + ax = fig.add_subplot(212) + ax.axis('off') + tab = table(ax, + cellColours=colours, + cellEdgeColours=colours, + bbox=(0, 0, 1, 1)) + plt.show() + def lager(spectra, nstates): """ Generate new set of states using tpot.GAMMA """ @@ -277,6 +304,7 @@ def main(): stamp_stats(df.stamps) spectra = np.array(generate_spectra(df)) + spectra = spectra[:250] # fixme - save spectra somewhere and do faster load. # cf repeatability too. From b12a8368abc8b1227e03da6a116e189af7dc08ed Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 14 Jul 2019 17:53:47 -0400 Subject: [PATCH 546/642] sha mushrooming options and async plotter thoughts --- karmapi/ncdf.py | 30 ++++++++++++++-- karmapi/sha.py | 91 +++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 101 insertions(+), 20 deletions(-) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 12ab74e..432c202 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -66,10 +66,22 @@ def stamps_to_datetime(stamps, epoch=None): def generate_data(stamps, values, epoch=None): epoch = epoch or current_epoch() - + for ix, stamp in enumerate(stamps): + yield values[ix], stamp + return + + print(f'ncdf.gnerate_data len stamps: {len(stamps)}') + lastix = 0 + for stamp in stamps: + ss, date, ix = stamp + print('ncdf.generate_data', ix) yield values[ix], stamp + + if ix < lastix: + print(f'whoaa {ix} {lastix}') + lastix = ix @@ -481,7 +493,21 @@ def __init__(self, args): self.stamps = stamp_sort(stamps) print("number of observations:", len(stamps)) - + + def filter_stamps(self, hour=None, day=None): + + good = [] + for stamp in self.stamps: + s, d, ix = stamp + if hour is not None: + if d.hour != hour: + continue + if day is not None: + if d.day != day: + continue + good.append(stamp) + + self.stamps = good if __name__ == '__main__': diff --git a/karmapi/sha.py b/karmapi/sha.py index 0f435cd..e67915d 100644 --- a/karmapi/sha.py +++ b/karmapi/sha.py @@ -19,27 +19,57 @@ def spectrum(value): return clm, pyshtools.spectralanalysis.spectrum(clm) -def generate_spectra(df): +def generate_spectra(df, lmax=10, mmax=10, power=False, delta=False, + topn=0): spectra = [] last = None lastdate = None - for value, stamp in ncdf.generate_data(df.stamps, df.values): - ss, date, ix = stamp + for ix, (value, stamp) in enumerate(ncdf.generate_data(df.stamps, df.values)): + ss, date, nix = stamp if last is None: last = value continue - delta = last - value + if delta: + value = last - value - clm, spect = spectrum(delta) - spectra.append(spect) + clm, spect = spectrum(value) + if power: + print('SPECT:', spect) + value = spect + else: + value = np.append(clm[0][:lmax, :lmax], + clm[1][:lmax, :lmax]) + junk, ww, hh = clm.shape + + start = 20 + clm[:, start:ww, start:hh] = 0.0 + + xxxx = pyshtools.expand.MakeGridDH(clm) + print(type(xxxx), xxxx.shape) + print(date) + if date.month == 1: + fig = plt.figure() + ax = fig.add_axes((0,0,1,1), projection='mollweide') + ax.imshow(xxxx) + plt.show() + + + #value = value.flatten() + #print('ix, value.shape', ix, value.shape) + + spectra.append(value) if lastdate and lastdate > date: break lastdate = date + if topn and ix > topn: + break + + print(f'FULL SET OF SPECTRA {len(spectra)} {len(spectra[0])}') return spectra @@ -61,7 +91,7 @@ def plots(df): clm, spect = spectrum(delta) spectra.append(spect) - print(f'SPECT {spect.cumsum()/spect.sum()}') + #print(f'SPECT {spect.cumsum()/spect.sum()}') if date >= datetime.datetime(1990, 1, 1): break @@ -112,11 +142,12 @@ def plots(df): def stats(data): """ Return some standard stats """ + print("DATA STAtS (shape, mean, var, percentiles)") print(data.shape) print(data.mean()) print(data.var()) print(np.percentile(data.cumsum(), [0.25, 0.5, 0.75, 0.9, 0.99])) - + print() means = data.mean(axis=0) print(f'means: {means.shape}') stds = data.std(axis=0) @@ -124,7 +155,7 @@ def stats(data): for x in range(12): print(means[10*x:10 + (10 * x)]) - print() + print() def random_sample(data, n): @@ -148,9 +179,10 @@ def normalise(data): means = data.mean(axis=0) stds = data.std(axis=0) - + print(f'normalise {means}') + print(f'normalise {stds}') data -= means - data /=stds + data /= stds return data @@ -200,8 +232,11 @@ def brew(spectra, nstates=10): # generate random eh? A = np.random.random(size=(nstates, nstates)) + for i in range(nstates): + A[i, :] /= A[i, :].sum() P0 = np.random.random(size=nstates) + P0 /= P0.sum() tpot.A = A tpot.B = B @@ -211,6 +246,7 @@ def brew(spectra, nstates=10): print('TPOT filled, away we go') nsteps = 100 + lastscore = None for step in range(nsteps): tpot.brew() @@ -226,7 +262,12 @@ def brew(spectra, nstates=10): print(tpot.A) gamma_plot() + if step > 25: + if (tpot.SCORE - lastscore) < 1.0: + break + lastscore = tpot.SCORE + gamma_plot() for x in tpot.GAMMA[:10]: print(f'Gamma: {x}') @@ -293,33 +334,47 @@ def main(): parser = ncdf.argument_parser() parser.add_argument('--plot', action='store_true') + parser.add_argument('--topn', type=int, default=0) + parser.add_argument('--power', action='store_true') + parser.add_argument('--norm', action='store_true') + parser.add_argument('--day', type=int) + parser.add_argument('--hour', type=int) args = parser.parse_args() df = ncdf.CircularField(args) + df.filter_stamps(hour=args.hour, day=args.day) + if args.plot: plots(df) return - stamp_stats(df.stamps) - spectra = np.array(generate_spectra(df)) - spectra = spectra[:250] + topn = 20 + #stamp_stats(df.stamps) + spectra = np.array(generate_spectra( + df, + topn=args.topn, + power=args.power, + delta=args.delta)) + print(f'spectra zero shape {spectra[0].shape}') # fixme - save spectra somewhere and do faster load. # cf repeatability too. stats(spectra) - # maybe just normalise spectra? - nspectra = normalise(spectra) - stats(nspectra) + # maybe just normalise spectra? + if args.norm: + nspectra = normalise(spectra) + stats(nspectra) + spectra = nspectra sample = random_sample(spectra, 10) stats(sample) - brew(nspectra, 10) + brew(spectra, 10) if __name__ == '__main__': From be727817b6cf04e454534b28cb5d24a523979b4a Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 15 Jul 2019 09:56:07 -0400 Subject: [PATCH 547/642] sha with add mollweide thanks to pcolormesh v imshow --- karmapi/sha.py | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/karmapi/sha.py b/karmapi/sha.py index e67915d..fcc9a61 100644 --- a/karmapi/sha.py +++ b/karmapi/sha.py @@ -44,17 +44,21 @@ def generate_spectra(df, lmax=10, mmax=10, power=False, delta=False, clm[1][:lmax, :lmax]) junk, ww, hh = clm.shape - start = 20 + start = 40 clm[:, start:ww, start:hh] = 0.0 xxxx = pyshtools.expand.MakeGridDH(clm) - print(type(xxxx), xxxx.shape) + #print(type(xxxx), xxxx.shape) print(date) - if date.month == 1: - fig = plt.figure() - ax = fig.add_axes((0,0,1,1), projection='mollweide') - ax.imshow(xxxx) - plt.show() + + fig = plt.figure() + ax = fig.add_axes((0,0,1,1), projection='mollweide') + lon = np.linspace(-np.pi, np.pi, xxxx.shape[1]) + lat = np.linspace(-np.pi/2, np.pi/2, xxxx.shape[0]) + lon, lat = np.meshgrid(lon, lat) + ax.pcolormesh(lon, lat, xxxx[::-1], cmap=plt.cm.jet) + plt.grid(True) + plt.show() #value = value.flatten() @@ -337,6 +341,7 @@ def main(): parser.add_argument('--topn', type=int, default=0) parser.add_argument('--power', action='store_true') parser.add_argument('--norm', action='store_true') + parser.add_argument('--nstates', type=int, default=10) parser.add_argument('--day', type=int) parser.add_argument('--hour', type=int) @@ -370,11 +375,11 @@ def main(): stats(nspectra) spectra = nspectra - sample = random_sample(spectra, 10) + sample = random_sample(spectra, args.nstates) stats(sample) - brew(spectra, 10) + brew(spectra, args.nstates) if __name__ == '__main__': From ba68e3c7737644cc3342760e5b670c09de609a0b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 21 Jul 2019 18:11:01 -0400 Subject: [PATCH 548/642] turn tpot into class Tea Plot --- karmapi/sha.py | 52 ++++++- karmapi/tpot.py | 383 ++++++++++++++++++++++++------------------------ 2 files changed, 236 insertions(+), 199 deletions(-) diff --git a/karmapi/sha.py b/karmapi/sha.py index fcc9a61..43c19aa 100644 --- a/karmapi/sha.py +++ b/karmapi/sha.py @@ -1,3 +1,11 @@ +""" +Spherical Harmonic Analysis and markov models. + +And also, plotting as you go. + +Navigating data. +""" + from karmapi import ncdf, tpot @@ -19,12 +27,34 @@ def spectrum(value): return clm, pyshtools.spectralanalysis.spectrum(clm) +def molly(xxxx, ax=None, vmax=None, vmin=None): + """ yet another plot """ + if vmax is None: + vmax = xxxx.max() + vmin = xxxx.min() + + if ax is None: + fig = plt.figure() + + ax = fig.add_axes((0,0,1,1), projection='mollweide') + lon = np.linspace(-np.pi, np.pi, xxxx.shape[1]) + lat = np.linspace(-np.pi/2, np.pi/2, xxxx.shape[0]) + lon, lat = np.meshgrid(lon, lat) + ax.pcolormesh(lon, lat, xxxx[::-1], cmap=plt.cm.jet, + vmin=vmin, vmax=vmax) + + # the next two don't belong here + plt.grid(True) + plt.show() + + def generate_spectra(df, lmax=10, mmax=10, power=False, delta=False, topn=0): spectra = [] last = None lastdate = None + vmax = vmin = None for ix, (value, stamp) in enumerate(ncdf.generate_data(df.stamps, df.values)): ss, date, nix = stamp @@ -51,14 +81,20 @@ def generate_spectra(df, lmax=10, mmax=10, power=False, delta=False, #print(type(xxxx), xxxx.shape) print(date) - fig = plt.figure() - ax = fig.add_axes((0,0,1,1), projection='mollweide') - lon = np.linspace(-np.pi, np.pi, xxxx.shape[1]) - lat = np.linspace(-np.pi/2, np.pi/2, xxxx.shape[0]) - lon, lat = np.meshgrid(lon, lat) - ax.pcolormesh(lon, lat, xxxx[::-1], cmap=plt.cm.jet) - plt.grid(True) - plt.show() + if vmax is None: + vmax = xxxx.max() + vmin = xxxx.min() + + if date.month == 6 and 0 == date.year % 10: + fig = plt.figure() + ax = fig.add_axes((0,0,1,1), projection='mollweide') + lon = np.linspace(-np.pi, np.pi, xxxx.shape[1]) + lat = np.linspace(-np.pi/2, np.pi/2, xxxx.shape[0]) + lon, lat = np.meshgrid(lon, lat) + ax.pcolormesh(lon, lat, xxxx[::-1], cmap=plt.cm.jet, + vmin=vmin, vmax=vmax) + plt.grid(True) + plt.show() #value = value.flatten() diff --git a/karmapi/tpot.py b/karmapi/tpot.py index a1489aa..fab45f5 100644 --- a/karmapi/tpot.py +++ b/karmapi/tpot.py @@ -10,246 +10,247 @@ import numpy as np # tea -A = None -B = None -P0 = None -ALPHA = None -BETA = None -GAMMA = None -SCALE = None +class TeaPlot: -# beer -R_A = None -R_B = None -R_P0 = None -R_ALPHA = None -R_BETA = None -R_GAMMA = None - - -# ingredients -OBSERVATIONS = None - -def alpha(): - """ Alpha pass - - observations: array with observations at time t=0,1, .. T - - A: state transition matrix. n x n, n = number of states - - B: prob of observation given hidden state, n * k, - k = size of observation space. + def __init__(self, + A=None, B=None, P0): + + self.A = A + self.B = B + self.P0 = P0 + self.ALPHA = None + self.BETA = None + self.GAMMA = None + self.SCALE = None + + # beer + self.R_A = None + self.R_B = None + self.R_P0 = None + self.R_ALPHA = None + self.R_BETA = None + self.R_GAMMA = None + + + # ingredients + self.OBSERVATIONS = None + + def alpha(self): + """ Alpha pass + + observations: array with observations at time t=0,1, .. T + + A: state transition matrix. n x n, n = number of states - p0: initial probability of each state. + B: prob of observation given hidden state, n * k, + k = size of observation space. - another turning point.. - - fork in the road... + p0: initial probability of each state. - time will show the way. - """ + another turning point.. + + fork in the road... - observations = OBSERVATIONS - - T = len(OBSERVATIONS) + time will show the way. + """ - n = A.shape[0] - k = B.shape[1] + observations = self.OBSERVATIONS + + T = len(OBSERVATIONS) + A = self.A + B = self.B + P0 = self.P0 + + n = A.shape[0] + k = B.shape[1] + + alpha = np.zeros(shape=(T, n)) + scale = np.zeros(T) + + # calculate alpha[0] + alpha[0] = P0 * B[observations[0]] + scale[0] = sum(alpha[0]) + alpha[0] /= scale[0] + + # spin through the remaining observations + for t in range(1, T): + o = observations[t] + alpha[t] = (alpha[t-1] @ A) * B[o] + + # normalise + scale[t] = sum(alpha[t]) + alpha[t] /= scale[t] + + # Save results for later passes + self.ALPHA = alpha + self.SCALE = scale + + self.SCORE = sum(np.log(scale)) + + def beta(self): + """ Beta pass + + observations: array with observations at time t=0,1, .. T + + A: state transition matrix. n x n, n = number of states - alpha = np.zeros(shape=(T, n)) - scale = np.zeros(T) + B: prob of observation given hidden state, n * k, + k = size of observation space. - # calculate alpha[0] - alpha[0] = P0 * B[observations[0]] - scale[0] = sum(alpha[0]) - alpha[0] /= scale[0] + scale: scaling factors from alpha pass - # spin through the remaining observations - for t in range(1, T): - o = observations[t] - alpha[t] = (alpha[t-1] @ A) * B[o] + it is something unpredictable ... + """ + observations = self.OBSERVATIONS + scale = self.SCALE + A = self.A + B = self.B - # normalise - scale[t] = sum(alpha[t]) - alpha[t] /= scale[t] - - # Save results for later passes - global ALPHA, SCALE, SCORE - ALPHA = alpha - SCALE = scale + T = len(observations) - SCORE = sum(np.log(scale)) + n = A.shape[0] + k = B.shape[1] -def beta(): - """ Beta pass - - observations: array with observations at time t=0,1, .. T - - A: state transition matrix. n x n, n = number of states + beta = np.zeros(shape=(T, n)) - B: prob of observation given hidden state, n * k, - k = size of observation space. + # Beta[T-1] uniformly set to 1.0 + beta[T-1] = 1 - scale: scaling factors from alpha pass + # spin through the remaining observations + for t in range(T-2, -1, -1): + o = observations[t+1] - it is something unpredictable ... - """ - observations = OBSERVATIONS - scale = SCALE - - T = len(observations) + beta[t] = (beta[t+1] * B[o]) @ A.T + + # normalise + beta[t] /= scale[t+1] - n = A.shape[0] - k = B.shape[1] + # save beta pass results + self.BETA = beta - beta = np.zeros(shape=(T, n)) - # Beta[T-1] uniformly set to 1.0 - beta[T-1] = 1 + def gamma(self): + """ Gamma pass - # spin through the remaining observations - for t in range(T-2, -1, -1): - o = observations[t+1] + but in the end is right.. + """ + self.GAMMA = self.ALPHA * self.BETA - beta[t] = (beta[t+1] * B[o]) @ A.T + def bm_rest(self): + """ Re-estimate B matrix """ - # normalise - beta[t] /= scale[t+1] - - # save beta pass results - global BETA - BETA = beta + # spin through observations to re-estimate B + bdash = np.zeros(shape=B.shape) + for obs, gam in zip(self.OBSERVATIONS, self.GAMMA): + bdash[obs, :] += gam -def gamma(): - """ Gamma pass - - but in the end is right.. - """ - global GAMMA - - GAMMA = ALPHA * BETA - -def bm_rest(): - """ Re-estimate B matrix """ - - # spin through observations to re-estimate B - bdash = np.zeros(shape=B.shape) - - for obs, gam in zip(OBSERVATIONS, GAMMA): - bdash[obs, :] += gam - - nstates = B.shape[1] - - for i in range(nstates): - bdash[:, i] /= sum(GAMMA[:, i]) - - global R_B - - R_B = bdash + nstates = B.shape[1] + + for i in range(nstates): + bdash[:, i] /= sum(self.GAMMA[:, i]) + self.R_B = bdash -def am_rest(): - pass -def p0_rest(): - """ Re-estimate initial state probabilities """ - global R_P0 + def am_rest(self): + pass - R_P0 = GAMMA[0] / sum(GAMMA[0]) + def p0_rest(self): + """ Re-estimate initial state probabilities """ + self.R_P0 = self.GAMMA[0] / sum(self.GAMMA[0]) -def am_rest(): - """ Re-estimate A matrix. """ - - ksi = np.zeros(shape=A.shape) - T = ALPHA.shape[0] - n = A.shape[0] - - for t in range(1, T): - obs = OBSERVATIONS[t] - totweight = 0. - weights = np.zeros(shape=A.shape) + def am_rest(self): + """ Re-estimate A matrix. """ + + ksi = np.zeros(shape=A.shape) + T = ALPHA.shape[0] + n = A.shape[0] + + for t in range(1, T): + obs = OBSERVATIONS[t] + totweight = 0. + weights = np.zeros(shape=A.shape) - for i in range(n): - for j in range(n): - # alpha[t] = (alpha[t-1] @ A) * B[o] - weight = ALPHA[t-1, i] * A[i, j] * BETA[t, j] * B[obs, j] / SCALE[n] - totweight += weight - weights[i, j] += weight + for i in range(n): + for j in range(n): + # alpha[t] = (alpha[t-1] @ A) * B[o] + weight = ALPHA[t-1, i] * A[i, j] * BETA[t, j] * B[obs, j] / SCALE[n] + totweight += weight + weights[i, j] += weight - weights /= totweight - ksi += weights + weights /= totweight + ksi += weights - # do some gymnastics to scale ksi - ksi = (ksi.T / ksi.T.sum(0)).T + # do some gymnastics to scale ksi + ksi = (ksi.T / ksi.T.sum(0)).T - # Save the re-estimate - global R_A - R_A = ksi + # Save the re-estimate + global R_A + R_A = ksi -def fill(parms): - """ Fill the teapot """ - global A, B, P0, ALPHA, BETA, GAMMA, OBSERVATIONS + def fill(self, parms): + """ Fill the teapot from parms - A = parms.get('a') - B = parms.get('b') - P0 = parms.get('p0') + parms: a dictionary of goodies. + """ + self.A = parms.get('a') + self.B = parms.get('b') + self.P0 = parms.get('p0') - OBSERVATIONS = parms.get('observations') - - ALPHA = parms.get('alpha') - BETA = parms.get('beta') - GAMMA = parms.get('gamma') - ALPHA = parms.get('alpha') + self.OBSERVATIONS = parms.get('observations') + self.ALPHA = parms.get('alpha') + self.BETA = parms.get('beta') + self.GAMMA = parms.get('gamma') + self.ALPHA = parms.get('alpha') -def brew(): - """ Brew some T """ - alpha() - beta() - gamma() - -def beer(): - """ RE-Estimate B matrix - beer = reverse(reeb) + def brew(self): + """ Brew some T """ + self.alpha() + self.beta() + self.gamma() + + def beer(self): + """ RE-Estimate B matrix - Since we are in Bermuda, ginger beer perhaps. + beer = reverse(reeb) - I hope you have the time of your life... - """ - bm_rest() - am_rest() - p0_rest() + Since we are in Bermuda, ginger beer perhaps. -def stir(): + I hope you have the time of your life... + """ + self.bm_rest() + self.am_rest() + self.p0_rest() - global P0, A, B + def stir(self): - A = R_A - B = R_B - P0 = R_P0 + self.A = self.R_A + self.B = self.R_B + self.P0 = self.R_P0 -def stew(iters = 100, epsilon=.01): + def stew(self, iters = 100, epsilon=.01): - xscore = None - for iter in range(iters): - brew() - beer() - stir() + xscore = None + for iter in range(iters): + brew() + beer() + stir() - # check in case we seem to have converged - if xscore is not None: - delta = SCORE - xscore - if delta < epsilon: - break - - xscore = SCORE + # check in case we seem to have converged + if xscore is not None: + delta = SCORE - xscore + if delta < epsilon: + break + + xscore = SCORE -def ferment(): - pass + def ferment(): + pass From 677c4fa6bbd79f6ec1b44313d7d4ce003eb263e3 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 21 Jul 2019 19:11:34 -0400 Subject: [PATCH 549/642] making sha tpot work again post TeaPlot class --- karmapi/sha.py | 68 ++++++++++++++++++++++++------------------------- karmapi/tpot.py | 31 +++++++++++----------- 2 files changed, 49 insertions(+), 50 deletions(-) diff --git a/karmapi/sha.py b/karmapi/sha.py index 43c19aa..01cc786 100644 --- a/karmapi/sha.py +++ b/karmapi/sha.py @@ -262,14 +262,27 @@ def make_bmatrix(spectra, states): return observations, B +class TeaPlot(tpot.TeaPlot): + + def beer(self): + + super().beer() + rebrew(self) + + def brew(spectra, nstates=10): """ Perform tpot algorithm """ + tplot = TeaPlot() + sample = random_sample(spectra, nstates) observations, B = make_bmatrix(spectra, sample) - + tplot.OBSERVATIONS = observations + tplot.spectra = spectra + tplot.nstates = nstates + # generate random eh? A = np.random.random(size=(nstates, nstates)) for i in range(nstates): @@ -277,43 +290,24 @@ def brew(spectra, nstates=10): P0 = np.random.random(size=nstates) P0 /= P0.sum() + tplot.A = A + tplot.B = B + tplot.P0 = P0 - tpot.A = A - tpot.B = B - tpot.P0 = P0 - - tpot.OBSERVATIONS = observations - - print('TPOT filled, away we go') - nsteps = 100 - lastscore = None - for step in range(nsteps): - - tpot.brew() - - print(f'Step {step} score {tpot.SCORE}') - # re-estimage A, B, P0 - tpot.beer() - rebrew(spectra, nstates) - tpot.stir() + tplot.OBSERVATIONS = observations - if step % 25 == 0: - print(tpot.A) - gamma_plot() - if step > 25: - if (tpot.SCORE - lastscore) < 1.0: - break + print('TPOT filled, away we go') + print(tplot.A) + tplot.stew(iters=100) - lastscore = tpot.SCORE - - gamma_plot() + gamma_plot(tplot) for x in tpot.GAMMA[:10]: print(f'Gamma: {x}') -def gamma_plot(): +def gamma_plot(tpot): T, nstates = tpot.GAMMA.shape @@ -344,26 +338,30 @@ def gamma_plot(): plt.show() -def lager(spectra, nstates): +def lager(tplot): """ Generate new set of states using tpot.GAMMA """ + + spectra, nstates = tplot.spectra, tplot.states + nstates = tplot.nstates + states = np.zeros(shape=(nstates, len(spectra[0])), dtype=float) - for obs, gam in zip(spectra, tpot.GAMMA): + for obs, gam in zip(spectra, tplot.GAMMA): for state in range(nstates): states[state] += gam[state] * obs for i in range(nstates): - states[i] /= sum(tpot.GAMMA[:, i]) + states[i] /= sum(tplot.GAMMA[:, i]) return states -def rebrew(spectra, nstates): +def rebrew(tplot): """ Do re-estimation """ # re-estimate states based on gamma - states = lager(spectra, nstates) + states = lager(tplot) - observations, B = make_bmatrix(spectra, states) + observations, B = make_bmatrix(tplot.spectra, states) tpot.B = B tpot.OBSERVATIONS = observations diff --git a/karmapi/tpot.py b/karmapi/tpot.py index fab45f5..b769264 100644 --- a/karmapi/tpot.py +++ b/karmapi/tpot.py @@ -13,7 +13,7 @@ class TeaPlot: def __init__(self, - A=None, B=None, P0): + A=None, B=None, P0=None): self.A = A self.B = B @@ -56,7 +56,7 @@ def alpha(self): observations = self.OBSERVATIONS - T = len(OBSERVATIONS) + T = len(observations) A = self.A B = self.B P0 = self.P0 @@ -140,6 +140,7 @@ def bm_rest(self): """ Re-estimate B matrix """ # spin through observations to re-estimate B + B = self.B bdash = np.zeros(shape=B.shape) for obs, gam in zip(self.OBSERVATIONS, self.GAMMA): @@ -152,23 +153,24 @@ def bm_rest(self): self.R_B = bdash - - def am_rest(self): - pass - def p0_rest(self): """ Re-estimate initial state probabilities """ self.R_P0 = self.GAMMA[0] / sum(self.GAMMA[0]) def am_rest(self): """ Re-estimate A matrix. """ + A = self.A + B = self.B + ALPHA = self.ALPHA + BETA = self.BETA + SCALE = self.SCALE ksi = np.zeros(shape=A.shape) T = ALPHA.shape[0] n = A.shape[0] for t in range(1, T): - obs = OBSERVATIONS[t] + obs = self.OBSERVATIONS[t] totweight = 0. weights = np.zeros(shape=A.shape) @@ -186,8 +188,7 @@ def am_rest(self): ksi = (ksi.T / ksi.T.sum(0)).T # Save the re-estimate - global R_A - R_A = ksi + self.R_A = ksi def fill(self, parms): @@ -236,17 +237,17 @@ def stew(self, iters = 100, epsilon=.01): xscore = None for iter in range(iters): - brew() - beer() - stir() - + self.brew() + self.beer() + self.stir() + print(f'SCORE {self.SCORE}') # check in case we seem to have converged if xscore is not None: - delta = SCORE - xscore + delta = self.SCORE - xscore if delta < epsilon: break - xscore = SCORE + xscore = self.SCORE def ferment(): From 5e64ce780cf940e54d9288af4e3ba1a8b4690183 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 22 Jul 2019 21:56:42 -0400 Subject: [PATCH 550/642] sha and ncdf re org --- karmapi/ncdf.py | 255 ++++++++++-------------------------------------- karmapi/sha.py | 104 +++++++++++++------- karmapi/tpot.py | 3 + 3 files changed, 125 insertions(+), 237 deletions(-) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index 432c202..bc5b235 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -63,188 +63,6 @@ def stamps_to_datetime(stamps, epoch=None): yield epoch + datetime.timedelta(hours=int(stamp)) -def generate_data(stamps, values, epoch=None): - - epoch = epoch or current_epoch() - - for ix, stamp in enumerate(stamps): - yield values[ix], stamp - return - - print(f'ncdf.gnerate_data len stamps: {len(stamps)}') - lastix = 0 - for stamp in stamps: - ss, date, ix = stamp - - print('ncdf.generate_data', ix) - yield values[ix], stamp - - if ix < lastix: - print(f'whoaa {ix} {lastix}') - lastix = ix - - - -def images(path, stamps, values): - - lastdate = None - for data, date in generate_data(stamps, values): - - print(date) - pyplot.imshow(data) - - item = Path(f'{path}/{date.year}/1/1/').expanduser() - - item.mkdir(exist_ok=True, parents=True) - - filename = f'{date.month:02}{date.day:02}_' - filename += f'{date.hour:02}{date.minute:02}{date.second:02}.jpg' - - print(filename) - item = item / filename - - pyplot.savefig(str(item), bbox_inches='tight', pad_inches=0) - - -def totals(stamps, values): - - totals = [] - for data, date in generate_data(stamps, values): - total = sum(sum(data)) - totals.append(total) - - return totals - -def pcs(stamps, values, n=None): - """ Get principal components for each longitude - - See how picture changes if we just use first 2 components. - """ - - if n: - stamps = stamps[:n] - - records = [] - for lon in range(1): - for data, date in generate_data(stamps, values): - print(date) - records.append(data[lon]) - - records = np.array(records) - - print(records.shape) - - pca = sonogram.Principals(records, standardize=True) - - print(pca.Wt) - - return pca - - -def downsample(stamps, values, k=15): - - - for data, date in generate_data(stamps, values): - - xx = values[0] - width, height = xx.shape - - nn = len(stamps) - - - -def delta(stamps, values): - - nn = 37 - totals = values[0] - for x in range(1, nn * 48): - totals += values[x] - - totals /= (nn * 48) - print(totals.shape) - - dt = list(stamps_to_datetime(stamps)) - - rolling = None - alpha = .3 - - results = [] - for x in range(nn): - - data = values[x * 48] - for offset in range(1, 48): - ix = (x * 48) + offset - data += values[ix] - data /= 48 - data -= totals - - results.append(data) - - - print(len(results)) - window = 5 - data = results[0].copy() - for w in range(1, window): - data += results[w] - print(data.mean()) - - print('start') - for ix, (inn, out) in enumerate(zip(results[window:], results)): - - data += inn - - data -= out - #xx = pyplot.subplot(8, 4, 1 + x - window) - #xx.set_axis_off() - - print(f'{dt[48*ix]} {data.mean()}, {data.max()}, {data.min()}') - xx = imshow(data / window, vmin=-3, vmax=3, cmap='rainbow') - #for x in dir(xx): - # print(x) - - #colorbar() - title(str(dt[48*(ix + window)])) - saveimage('karmapi/ecmwf/anomaly', dt[48 * ix]) - - - -def saveimage(path, date): - - item = Path(f'{path}/1979/1/1').expanduser() - - item.mkdir(exist_ok=True, parents=True) - - filename = f'{date.year:02}{date.month:02}.jpg' - - print(filename) - item = item / filename - - pyplot.savefig(str(item), bbox_inches='tight', pad_inches=0) - - -def model(stamps, values): - """ Build a model """ - stamps = list(stamps) - xx = values[stamps[0]] - - print(xx.shape) - - -def model(stamps, values): - """ fit a model """ - - dt = list(stamps_to_datetime(stamps)) - - data = pcs(stamps, values) - -def xxx(stamps, ix, n=10): - - for x in stamps[ix: ix + n]: - print(x) - - print([x % 24 for x in stamps[ix: ix + n]]) - - def stamp_sort(stamps): """ FIXME: use this to go through images in order """ ss = sorted(zip(stamps, @@ -455,27 +273,6 @@ def __init__(self, parent, stamps=None, values=None, super().__init__(parent, balls=balls, **kwargs) - - - - -def argument_parser(parser=None): - - parser = cpr.argument_parser(parser) - parser.add_argument('--path', default='karmapi/ecmwf') - parser.add_argument('--value', default='t2m') - parser.add_argument('--raw', default='temperature.nc') - parser.add_argument( - '--pc', action='store_true', - help='do principal components') - - parser.add_argument('--delta', action='store_true') - parser.add_argument('--model', action='store_true') - parser.add_argument('--offset', type=int, default=0) - parser.add_argument('--save') - - return parser - class CircularField: def __init__(self, args): @@ -494,6 +291,10 @@ def __init__(self, args): print("number of observations:", len(stamps)) + # totals across years + self.totals = {} + + def filter_stamps(self, hour=None, day=None): good = [] @@ -509,6 +310,54 @@ def filter_stamps(self, hour=None, day=None): self.stamps = good + def generate_data(self, epoch=None): + """ spin through frames in stamp order """ + epoch = epoch or current_epoch() + + for ix, stamp in enumerate(self.stamps): + ss, date, nix = stamp + yield date, self.values[nix] + + + def sum_years(self): + """ Build totals across years """ + counts = {} + for date, value in self.generate_data(): + key = (date.month, date.day, date.hour) + + if key in self.totals: + self.totals[key] += value + counts[key] += 1 + else: + self.totals[key] = value + counts[key] = 1 + + for key in self.totals.keys(): + self.totals[key] /= counts[key] + + def deviation(self, date, value): + """ Return defiation from monthly mean """ + key = (date.month, date.day, date.hour) + return value - self.totals[key] + + +def argument_parser(parser=None): + + parser = cpr.argument_parser(parser) + parser.add_argument('--path', default='karmapi/ecmwf') + parser.add_argument('--value', default='t2m') + parser.add_argument('--raw', default='temperature.nc') + parser.add_argument( + '--pc', action='store_true', + help='do principal components') + + parser.add_argument('--delta', action='store_true') + parser.add_argument('--model', action='store_true') + parser.add_argument('--offset', type=int, default=0) + parser.add_argument('--save') + + return parser + if __name__ == '__main__': diff --git a/karmapi/sha.py b/karmapi/sha.py index 01cc786..4e7713f 100644 --- a/karmapi/sha.py +++ b/karmapi/sha.py @@ -18,6 +18,8 @@ import datetime from collections import Counter +import math +import time def spectrum(value): @@ -48,15 +50,21 @@ def molly(xxxx, ax=None, vmax=None, vmin=None): plt.show() -def generate_spectra(df, lmax=10, mmax=10, power=False, delta=False, +def generate_spectra(df, lmax=20, mmax=10, power=False, delta=False, topn=0): + print('Calculating means across years') + df.sum_years() + print('Done means across years') + spectra = [] last = None lastdate = None vmax = vmin = None - for ix, (value, stamp) in enumerate(ncdf.generate_data(df.stamps, df.values)): - ss, date, nix = stamp + plots = [] + for ix, (date, value) in enumerate(df.generate_data()): + + value = df.deviation(date, value) if last is None: last = value @@ -76,30 +84,17 @@ def generate_spectra(df, lmax=10, mmax=10, power=False, delta=False, start = 40 clm[:, start:ww, start:hh] = 0.0 - + xxxx = pyshtools.expand.MakeGridDH(clm) #print(type(xxxx), xxxx.shape) - print(date) - - if vmax is None: - vmax = xxxx.max() - vmin = xxxx.min() - - if date.month == 6 and 0 == date.year % 10: - fig = plt.figure() - ax = fig.add_axes((0,0,1,1), projection='mollweide') - lon = np.linspace(-np.pi, np.pi, xxxx.shape[1]) - lat = np.linspace(-np.pi/2, np.pi/2, xxxx.shape[0]) - lon, lat = np.meshgrid(lon, lat) - ax.pcolormesh(lon, lat, xxxx[::-1], cmap=plt.cm.jet, - vmin=vmin, vmax=vmax) - plt.grid(True) - plt.show() - + if date.month == 9 and date.year % 5 == 0: + print('lmax:', lmax) + plots.append((date, xxxx)) #value = value.flatten() #print('ix, value.shape', ix, value.shape) + spectra.append(value) if lastdate and lastdate > date: @@ -109,6 +104,41 @@ def generate_spectra(df, lmax=10, mmax=10, power=False, delta=False, if topn and ix > topn: break + vmax = -np.inf + vmin = np.inf + + for date, plot in plots: + + vmax = max(plot.max(), vmax) + vmin = min(plot.min(), vmin) + + print('vmax/vmin', vmax, vmin) + + ix = 1 + for date, plot in plots: + fig = plt.figure() + + print(date, plot.min(), plot.max(), np.percentile(plot, 50), plot.mean()) + ax = fig.add_axes((0,0,1,1), projection='mollweide') + #ax = fig.add_subplot(2, len(plots)//2, ix, + # projection='mollweide') + ix += 1 + + lon = np.linspace(-np.pi, np.pi, xxxx.shape[1]) + lat = np.linspace(-np.pi/2, np.pi/2, xxxx.shape[0]) + lon, lat = np.meshgrid(lon, lat) + ax.pcolormesh(lon, lat, plot[::-1], cmap=plt.cm.jet, + vmax=vmax, vmin=vmin) + ax.set_title(str(date)) + plt.grid(True) + + + plt.show() + #for x in range(5): + # print('sleeping..', x) + # time.sleep(1) + + print(f'FULL SET OF SPECTRA {len(spectra)} {len(spectra[0])}') return spectra @@ -118,8 +148,7 @@ def plots(df): last = None spectra = [] - for value, stamp in ncdf.generate_data(df.stamps, df.values): - ss, date, ix = stamp + for date, value in df.generate_data(): print(date) if last is None: @@ -167,8 +196,6 @@ def plots(df): last = value - if ix >= 12: - break @@ -182,7 +209,7 @@ def plots(df): def stats(data): """ Return some standard stats """ - print("DATA STAtS (shape, mean, var, percentiles)") + print("DATA STATS (shape, mean, var, percentiles)") print(data.shape) print(data.mean()) print(data.var()) @@ -205,7 +232,7 @@ def random_sample(data, n): stds = data.std(axis=0) shape = [n] + list(means.shape) - return norm(size=shape) + samp = norm(size=shape) # old code below scales to original distro print(samp.shape) @@ -219,8 +246,11 @@ def normalise(data): means = data.mean(axis=0) stds = data.std(axis=0) - print(f'normalise {means}') - print(f'normalise {stds}') + #print(f'normalise {means}') + #print(f'normalise {stds}') + stds = np.where(stds==0.0, + np.ones(shape=stds.shape), + stds) data -= means data /= stds @@ -258,7 +288,9 @@ def make_bmatrix(spectra, states): # so prob e ** x or log(x) here ... or all ok? #print(obs, state, dist) - B[obs, state] = (abs(dist) ** 0.5) + #B[obs, state] = (abs(dist) ** 0.5) + #print('B', obs, state, dist, math.e ** (-1 * dist)) + B[obs, state] = math.e ** (-1 * dist) return observations, B @@ -279,6 +311,7 @@ def brew(spectra, nstates=10): sample = random_sample(spectra, nstates) observations, B = make_bmatrix(spectra, sample) + print('b matrix:', B[0]) tplot.OBSERVATIONS = observations tplot.spectra = spectra tplot.nstates = nstates @@ -294,16 +327,19 @@ def brew(spectra, nstates=10): tplot.B = B tplot.P0 = P0 - tplot.OBSERVATIONS = observations - + tplot.brew() + tplot.beer() + tplot.stir() + print('TPOT filled, away we go') print(tplot.A) + print(tplot.P0) tplot.stew(iters=100) gamma_plot(tplot) - for x in tpot.GAMMA[:10]: + for x in tplot.GAMMA[:10]: print(f'Gamma: {x}') @@ -342,7 +378,7 @@ def lager(tplot): """ Generate new set of states using tpot.GAMMA """ - spectra, nstates = tplot.spectra, tplot.states + spectra, nstates = tplot.spectra, tplot.nstates nstates = tplot.nstates states = np.zeros(shape=(nstates, len(spectra[0])), dtype=float) diff --git a/karmapi/tpot.py b/karmapi/tpot.py index b769264..1169191 100644 --- a/karmapi/tpot.py +++ b/karmapi/tpot.py @@ -85,6 +85,9 @@ def alpha(self): self.ALPHA = alpha self.SCALE = scale + print('SCALE') + for x in range(10): + print(x, np.log(scale[x])) self.SCORE = sum(np.log(scale)) def beta(self): From d04bf99369a4805f8265136246b433a15079d479 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 22 Jul 2019 21:59:51 -0400 Subject: [PATCH 551/642] sha and ncdf re org --- karmapi/sha.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karmapi/sha.py b/karmapi/sha.py index 4e7713f..7260111 100644 --- a/karmapi/sha.py +++ b/karmapi/sha.py @@ -50,7 +50,7 @@ def molly(xxxx, ax=None, vmax=None, vmin=None): plt.show() -def generate_spectra(df, lmax=20, mmax=10, power=False, delta=False, +def generate_spectra(df, lmax=200, mmax=10, power=False, delta=False, topn=0): print('Calculating means across years') From e7d1b2bfd7904dc4948b035aafb58a1d76a960ee Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 25 Jul 2019 11:44:43 -0400 Subject: [PATCH 552/642] sha showing promise now time for async? --- karmapi/sha.py | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/karmapi/sha.py b/karmapi/sha.py index 7260111..8b716ae 100644 --- a/karmapi/sha.py +++ b/karmapi/sha.py @@ -50,7 +50,7 @@ def molly(xxxx, ax=None, vmax=None, vmin=None): plt.show() -def generate_spectra(df, lmax=200, mmax=10, power=False, delta=False, +def generate_spectra(df, lmax=10, mmax=10, power=False, delta=False, topn=0): print('Calculating means across years') @@ -119,17 +119,28 @@ def generate_spectra(df, lmax=200, mmax=10, power=False, delta=False, fig = plt.figure() print(date, plot.min(), plot.max(), np.percentile(plot, 50), plot.mean()) - ax = fig.add_axes((0,0,1,1), projection='mollweide') - #ax = fig.add_subplot(2, len(plots)//2, ix, - # projection='mollweide') - ix += 1 - - lon = np.linspace(-np.pi, np.pi, xxxx.shape[1]) - lat = np.linspace(-np.pi/2, np.pi/2, xxxx.shape[0]) + #ax = fig.add_axes((0,0,1,1), projection='mollweide') + ax = fig.add_subplot(2, 1, 1, + projection='mollweide') + lon = np.linspace(-np.pi, np.pi, plot.shape[1]) + lat = np.linspace(-np.pi/2, np.pi/2, plot.shape[0]) lon, lat = np.meshgrid(lon, lat) ax.pcolormesh(lon, lat, plot[::-1], cmap=plt.cm.jet, vmax=vmax, vmin=vmin) ax.set_title(str(date)) + ax.axis('off') + key = (date.month, date.day, date.hour) + ax = fig.add_subplot(2, 1, 2, + projection='mollweide') + + xxxx = df.totals[key][1:] + lon = np.linspace(-np.pi, np.pi, xxxx.shape[1]) + lat = np.linspace(-np.pi/2, np.pi/2, xxxx.shape[0]) + lon, lat = np.meshgrid(lon, lat) + ax.axis('off') + ax.pcolormesh(lon, lat, xxxx[::-1], cmap=plt.cm.jet) + #vmax=vmax, vmin=vmin) + plt.grid(True) From f5e5ba6f11fcdb73b6944eb5795d0b2badb1f40b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 25 Jul 2019 15:21:45 -0400 Subject: [PATCH 553/642] make sha lmax a parameter --- karmapi/sha.py | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/karmapi/sha.py b/karmapi/sha.py index 8b716ae..e45e9f2 100644 --- a/karmapi/sha.py +++ b/karmapi/sha.py @@ -82,7 +82,7 @@ def generate_spectra(df, lmax=10, mmax=10, power=False, delta=False, clm[1][:lmax, :lmax]) junk, ww, hh = clm.shape - start = 40 + start = lmax clm[:, start:ww, start:hh] = 0.0 xxxx = pyshtools.expand.MakeGridDH(clm) @@ -104,21 +104,22 @@ def generate_spectra(df, lmax=10, mmax=10, power=False, delta=False, if topn and ix > topn: break - vmax = -np.inf - vmin = np.inf - for date, plot in plots: - - vmax = max(plot.max(), vmax) - vmin = min(plot.min(), vmin) - - print('vmax/vmin', vmax, vmin) - + vmax = None + vmin = None ix = 1 for date, plot in plots: fig = plt.figure() + fig.set_facecolor('black') + fig.set_edgecolor('black') + if vmax is None: + vmax = plot.max() + vmin = plot.min() + print('vmax/vmin', vmax, vmin) - print(date, plot.min(), plot.max(), np.percentile(plot, 50), plot.mean()) + + + print(date, plot.min(), plot.max(), plot.mean()) #ax = fig.add_axes((0,0,1,1), projection='mollweide') ax = fig.add_subplot(2, 1, 1, projection='mollweide') @@ -363,10 +364,12 @@ def gamma_plot(tpot): fig = plt.figure() ax = fig.add_subplot(211) data = tpot.GAMMA + print(f'data shape {data.shape}') - for i in range(nstates): - ax.bar(index, data[:, i], bottom=bottom) - bottom += data[:, i] + ax.imshow(data.T, aspect='auto') + #for i in range(nstates): + # ax.bar(index, data[:, i], bottom=bottom) + # bottom += data[:, i] from matplotlib import colors, cm @@ -420,6 +423,7 @@ def main(): parser.add_argument('--plot', action='store_true') parser.add_argument('--topn', type=int, default=0) + parser.add_argument('--lmax', type=int, default=10) parser.add_argument('--power', action='store_true') parser.add_argument('--norm', action='store_true') parser.add_argument('--nstates', type=int, default=10) @@ -440,6 +444,7 @@ def main(): #stamp_stats(df.stamps) spectra = np.array(generate_spectra( df, + lmax=args.lmax, topn=args.topn, power=args.power, delta=args.delta)) From cd33b10134f8d1a98249a125ef9bdd70c93c0fc2 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 26 Jul 2019 18:19:54 -0400 Subject: [PATCH 554/642] tinker with sha plots --- karmapi/sha.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/karmapi/sha.py b/karmapi/sha.py index e45e9f2..97fcdca 100644 --- a/karmapi/sha.py +++ b/karmapi/sha.py @@ -51,7 +51,7 @@ def molly(xxxx, ax=None, vmax=None, vmin=None): def generate_spectra(df, lmax=10, mmax=10, power=False, delta=False, - topn=0): + plot_month=None, topn=0): print('Calculating means across years') df.sum_years() @@ -88,7 +88,7 @@ def generate_spectra(df, lmax=10, mmax=10, power=False, delta=False, xxxx = pyshtools.expand.MakeGridDH(clm) #print(type(xxxx), xxxx.shape) - if date.month == 9 and date.year % 5 == 0: + if date.month == plot_month and date.year % 5 == 0: print('lmax:', lmax) plots.append((date, xxxx)) #value = value.flatten() @@ -111,7 +111,7 @@ def generate_spectra(df, lmax=10, mmax=10, power=False, delta=False, for date, plot in plots: fig = plt.figure() fig.set_facecolor('black') - fig.set_edgecolor('black') + #fig.set_edgecolor('white') if vmax is None: vmax = plot.max() vmin = plot.min() @@ -128,7 +128,7 @@ def generate_spectra(df, lmax=10, mmax=10, power=False, delta=False, lon, lat = np.meshgrid(lon, lat) ax.pcolormesh(lon, lat, plot[::-1], cmap=plt.cm.jet, vmax=vmax, vmin=vmin) - ax.set_title(str(date)) + ax.set_title(str(date), color='white') ax.axis('off') key = (date.month, date.day, date.hour) ax = fig.add_subplot(2, 1, 2, @@ -427,6 +427,8 @@ def main(): parser.add_argument('--power', action='store_true') parser.add_argument('--norm', action='store_true') parser.add_argument('--nstates', type=int, default=10) + + parser.add_argument('--month', type=int) parser.add_argument('--day', type=int) parser.add_argument('--hour', type=int) @@ -444,6 +446,7 @@ def main(): #stamp_stats(df.stamps) spectra = np.array(generate_spectra( df, + plot_month=args.month, lmax=args.lmax, topn=args.topn, power=args.power, From bf0bbd9832c56fe3873ed4356e15726b3648f140 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 28 Jul 2019 18:41:51 -0400 Subject: [PATCH 555/642] cmd line args and async options? --- karmapi/ncdf.py | 11 +++++--- karmapi/sha.py | 73 +++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 65 insertions(+), 19 deletions(-) diff --git a/karmapi/ncdf.py b/karmapi/ncdf.py index bc5b235..965def2 100644 --- a/karmapi/ncdf.py +++ b/karmapi/ncdf.py @@ -275,15 +275,18 @@ def __init__(self, parent, stamps=None, values=None, class CircularField: - def __init__(self, args): + def __init__(self, path='.', raw='temperature.nc', value='t2m', **kwargs): """ Load the file """ - path = Path.home() / Path(args.path) + print(path) + print(raw) + print(value) + path = Path.home() / Path(path) - self.df = load(path / args.raw) + self.df = load(path / raw) stamps = self.df.variables['time'] - self.values = self.df.variables[args.value] + self.values = self.df.variables[value] print(self.df.variables.keys()) diff --git a/karmapi/sha.py b/karmapi/sha.py index 97fcdca..940bd9e 100644 --- a/karmapi/sha.py +++ b/karmapi/sha.py @@ -51,7 +51,7 @@ def molly(xxxx, ax=None, vmax=None, vmin=None): def generate_spectra(df, lmax=10, mmax=10, power=False, delta=False, - plot_month=None, topn=0): + month=None, topn=0, **kwargs): print('Calculating means across years') df.sum_years() @@ -88,7 +88,7 @@ def generate_spectra(df, lmax=10, mmax=10, power=False, delta=False, xxxx = pyshtools.expand.MakeGridDH(clm) #print(type(xxxx), xxxx.shape) - if date.month == plot_month and date.year % 5 == 0: + if date.month == month and date.year % 5 == 0: print('lmax:', lmax) plots.append((date, xxxx)) #value = value.flatten() @@ -308,11 +308,60 @@ def make_bmatrix(spectra, states): class TeaPlot(tpot.TeaPlot): + def __init__(self, spectra=[], nstates=10, **kwargs): + + super().__init__(**kwargs) + self.spectra = spectra + self.nstates = nstates + def beer(self): super().beer() rebrew(self) + async def start(self): + + spectra = self.spectra + nstates = self.nstates + + sample = random_sample(spectra, nstates) + + observations, B = make_bmatrix(spectra, sample) + print('b matrix:', B[0]) + self.OBSERVATIONS = observations + + # generate random eh? + A = np.random.random(size=(nstates, nstates)) + for i in range(nstates): + A[i, :] /= A[i, :].sum() + + P0 = np.random.random(size=nstates) + P0 /= P0.sum() + self.A = A + self.B = B + self.P0 = P0 + + self.OBSERVATIONS = observations + + # do one tpot round + self.brew() + self.beer() + self.stir() + + # show a plot? + + async def run(self): + + while True: + + print('TPOT filled, away we go') + print(self.A) + print(self.P0) + self.stew(iters=100) + + gamma_plot(self) + for x in self.GAMMA[:10]: + print(f'Gamma: {x}') def brew(spectra, nstates=10): @@ -434,7 +483,7 @@ def main(): args = parser.parse_args() - df = ncdf.CircularField(args) + df = ncdf.CircularField(**args.__dict__) df.filter_stamps(hour=args.hour, day=args.day) @@ -446,29 +495,23 @@ def main(): #stamp_stats(df.stamps) spectra = np.array(generate_spectra( df, - plot_month=args.month, - lmax=args.lmax, - topn=args.topn, - power=args.power, - delta=args.delta)) + **args.__dict__)) + print(f'spectra zero shape {spectra[0].shape}') + # fixme - save spectra somewhere and do faster load. # cf repeatability too. - - stats(spectra) - # maybe just normalise spectra? if args.norm: nspectra = normalise(spectra) stats(nspectra) spectra = nspectra - sample = random_sample(spectra, args.nstates) - - stats(sample) + # TeaPlotter + tea_plotter = TeaPlot(spectra=spectra, + nstates=args.nstates) - brew(spectra, args.nstates) if __name__ == '__main__': From 9aacaf66097791b5c6cafbde140082cf91ae3523 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 29 Jul 2019 12:36:06 -0400 Subject: [PATCH 556/642] working towards working with blume magic --- karmapi/sha.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/karmapi/sha.py b/karmapi/sha.py index 940bd9e..6d2b874 100644 --- a/karmapi/sha.py +++ b/karmapi/sha.py @@ -10,9 +10,11 @@ from karmapi import ncdf, tpot import pyshtools +import curio from matplotlib import pyplot as plt from blume.table import table +from blume import magic import numpy as np @@ -508,11 +510,26 @@ def main(): stats(nspectra) spectra = nspectra + curio.run(run(spectra, args.nstates)) + +async def run(spectra, nstates): + # TeaPlotter tea_plotter = TeaPlot(spectra=spectra, - nstates=args.nstates) + nstates=nstates) + carpet = magic.Carpet() + iq = await carpet.add_queue('teaplot') + tea_plotter.queue = iq + farm = magic.PigFarm() + farm.viewer = carpet + farm.piglets.appendleft(tea_plotter) + await farm.start() + await farm.run() + + + if __name__ == '__main__': From 61b923ceaf292b92166105b1b8489040911dad2e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 29 Jul 2019 20:45:41 -0400 Subject: [PATCH 557/642] sha everything but the images edition --- karmapi/sha.py | 106 +++++++++++++++++++++++++----------------------- karmapi/tpot.py | 3 -- 2 files changed, 56 insertions(+), 53 deletions(-) diff --git a/karmapi/sha.py b/karmapi/sha.py index 6d2b874..633c075 100644 --- a/karmapi/sha.py +++ b/karmapi/sha.py @@ -11,7 +11,8 @@ import pyshtools import curio - +import matplotlib +matplotlib.use('Agg') from matplotlib import pyplot as plt from blume.table import table from blume import magic @@ -115,8 +116,8 @@ def generate_spectra(df, lmax=10, mmax=10, power=False, delta=False, fig.set_facecolor('black') #fig.set_edgecolor('white') if vmax is None: - vmax = plot.max() - vmin = plot.min() + vmax = np.percentile(plot, 95.) + vmin = np.percentile(plot, 5.) print('vmax/vmin', vmax, vmin) @@ -316,9 +317,17 @@ def __init__(self, spectra=[], nstates=10, **kwargs): self.spectra = spectra self.nstates = nstates + self.event_map = dict( + t=self.tea) + + async def tea(self): + + print('time for tea') + def beer(self): super().beer() + rebrew(self) async def start(self): @@ -349,8 +358,11 @@ async def start(self): self.brew() self.beer() self.stir() + print("Initial score", self.SCORE) # show a plot? + plot = gamma_plot(self) + await self.queue.put(plot) async def run(self): @@ -359,51 +371,18 @@ async def run(self): print('TPOT filled, away we go') print(self.A) print(self.P0) - self.stew(iters=100) - - gamma_plot(self) - for x in self.GAMMA[:10]: - print(f'Gamma: {x}') - - -def brew(spectra, nstates=10): - """ Perform tpot algorithm """ + self.stew(iters=100, epsilon=2.0) - tplot = TeaPlot() + plot = gamma_plot(self) + await self.queue.put(plot) - sample = random_sample(spectra, nstates) - - observations, B = make_bmatrix(spectra, sample) - print('b matrix:', B[0]) - tplot.OBSERVATIONS = observations - tplot.spectra = spectra - tplot.nstates = nstates - - # generate random eh? - A = np.random.random(size=(nstates, nstates)) - for i in range(nstates): - A[i, :] /= A[i, :].sum() - - P0 = np.random.random(size=nstates) - P0 /= P0.sum() - tplot.A = A - tplot.B = B - tplot.P0 = P0 - - tplot.OBSERVATIONS = observations - - tplot.brew() - tplot.beer() - tplot.stir() - - print('TPOT filled, away we go') - print(tplot.A) - print(tplot.P0) - tplot.stew(iters=100) + print(f'q size {self.queue.qsize()}') + + #for x in self.GAMMA[:10]: + # print(f'Gamma: {x}') - gamma_plot(tplot) - for x in tplot.GAMMA[:10]: - print(f'Gamma: {x}') + await curio.sleep(10) + def gamma_plot(tpot): @@ -436,8 +415,30 @@ def gamma_plot(tpot): cellColours=colours, cellEdgeColours=colours, bbox=(0, 0, 1, 1)) - plt.show() + return fig2data(fig) + + + +def fig2data (fig): + """ Convert a Matplotlib figure to a 4D numpy array with RGBA channels + + fig: a matplotlib figure + return: a numpy 3D array of RGBA values + """ + + # no renderer without this + fig.savefig('foo.png') + + # Get the RGBA buffer from the figure + w,h = fig.canvas.get_width_height() + buf = np.frombuffer(fig.canvas.tostring_argb(), dtype=np.uint8) + buf.shape = (w, h, 4) + + # canvas.tostring_argb give pixmap in ARGB mode. + # Roll the ALPHA channel to have it in RGBA mode + buf = np.roll ( buf, 3, axis = 2 ) + return buf def lager(tplot): """ Generate new set of states using tpot.GAMMA """ @@ -518,13 +519,18 @@ async def run(spectra, nstates): tea_plotter = TeaPlot(spectra=spectra, nstates=nstates) - carpet = magic.Carpet() - iq = await carpet.add_queue('teaplot') + farm = magic.PigFarm() + + carpet = farm.carpet() + + iq, width, height = await carpet.add_queue('teaplot') + + print(f'image queue {width} {height}') + print(f'image queue id {id(iq)}') tea_plotter.queue = iq - farm = magic.PigFarm() - farm.viewer = carpet farm.piglets.appendleft(tea_plotter) + await farm.start() await farm.run() diff --git a/karmapi/tpot.py b/karmapi/tpot.py index 1169191..b769264 100644 --- a/karmapi/tpot.py +++ b/karmapi/tpot.py @@ -85,9 +85,6 @@ def alpha(self): self.ALPHA = alpha self.SCALE = scale - print('SCALE') - for x in range(10): - print(x, np.log(scale[x])) self.SCORE = sum(np.log(scale)) def beta(self): From c49298ae83dc1a24f39c458e586a49c3f4ed7bcc Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 29 Jul 2019 23:57:54 -0400 Subject: [PATCH 558/642] figure to data fun with sha --- karmapi/sha.py | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/karmapi/sha.py b/karmapi/sha.py index 633c075..c1cd9ae 100644 --- a/karmapi/sha.py +++ b/karmapi/sha.py @@ -416,29 +416,10 @@ def gamma_plot(tpot): cellEdgeColours=colours, bbox=(0, 0, 1, 1)) - return fig2data(fig) + return magic.fig2data(fig) -def fig2data (fig): - """ Convert a Matplotlib figure to a 4D numpy array with RGBA channels - - fig: a matplotlib figure - return: a numpy 3D array of RGBA values - """ - - # no renderer without this - fig.savefig('foo.png') - - # Get the RGBA buffer from the figure - w,h = fig.canvas.get_width_height() - buf = np.frombuffer(fig.canvas.tostring_argb(), dtype=np.uint8) - buf.shape = (w, h, 4) - - # canvas.tostring_argb give pixmap in ARGB mode. - # Roll the ALPHA channel to have it in RGBA mode - buf = np.roll ( buf, 3, axis = 2 ) - return buf def lager(tplot): """ Generate new set of states using tpot.GAMMA """ From 9545e8bfb308e445f77af3e25cbae0c0cc523703 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 30 Jul 2019 11:53:53 -0400 Subject: [PATCH 559/642] make sha asynchronous with pretty plots --- karmapi/sha.py | 146 +++++++++++++++++++++++-------------------------- 1 file changed, 69 insertions(+), 77 deletions(-) diff --git a/karmapi/sha.py b/karmapi/sha.py index c1cd9ae..7b369e3 100644 --- a/karmapi/sha.py +++ b/karmapi/sha.py @@ -12,7 +12,6 @@ import pyshtools import curio import matplotlib -matplotlib.use('Agg') from matplotlib import pyplot as plt from blume.table import table from blume import magic @@ -53,8 +52,9 @@ def molly(xxxx, ax=None, vmax=None, vmin=None): plt.show() -def generate_spectra(df, lmax=10, mmax=10, power=False, delta=False, - month=None, topn=0, **kwargs): +async def generate_spectra(df, queue=None, + lmax=10, mmax=10, power=False, delta=False, + month=None, topn=0, **kwargs): print('Calculating means across years') df.sum_years() @@ -64,7 +64,11 @@ def generate_spectra(df, lmax=10, mmax=10, power=False, delta=False, last = None lastdate = None vmax = vmin = None - plots = [] + vmax = None + vmin = None + fig = plt.figure() + fig.set_facecolor('black') + for ix, (date, value) in enumerate(df.generate_data()): value = df.deviation(date, value) @@ -89,14 +93,48 @@ def generate_spectra(df, lmax=10, mmax=10, power=False, delta=False, clm[:, start:ww, start:hh] = 0.0 xxxx = pyshtools.expand.MakeGridDH(clm) + plot = xxxx #print(type(xxxx), xxxx.shape) - if date.month == month and date.year % 5 == 0: + if date.month == month: print('lmax:', lmax) - plots.append((date, xxxx)) - #value = value.flatten() - #print('ix, value.shape', ix, value.shape) - + + if vmax is None: + vmax = np.percentile(plot, 95.) + vmin = np.percentile(plot, 5.) + print('vmax/vmin', vmax, vmin) + + print(date, plot.min(), plot.max(), plot.mean()) + + fig.clear() + + #ax = fig.add_axes((0,0,1,1), projection='mollweide') + ax = fig.add_subplot(2, 1, 1, + projection='mollweide') + lon = np.linspace(-np.pi, np.pi, plot.shape[1]) + lat = np.linspace(-np.pi/2, np.pi/2, plot.shape[0]) + lon, lat = np.meshgrid(lon, lat) + ax.pcolormesh(lon, lat, plot[::-1], cmap=plt.cm.jet, + vmax=vmax, vmin=vmin) + ax.set_title(str(date), color='white') + ax.axis('off') + key = (date.month, date.day, date.hour) + ax = fig.add_subplot(2, 1, 2, + projection='mollweide') + + xxxx = df.totals[key][1:] + lon = np.linspace(-np.pi, np.pi, xxxx.shape[1]) + lat = np.linspace(-np.pi/2, np.pi/2, xxxx.shape[0]) + lon, lat = np.meshgrid(lon, lat) + ax.axis('off') + + ax.pcolormesh(lon, lat, xxxx[::-1], cmap=plt.cm.jet) + #vmax=vmax, vmin=vmin) + + plt.grid(True) + + await queue.put(magic.fig2data(fig)) + await curio.sleep(0) spectra.append(value) @@ -107,52 +145,6 @@ def generate_spectra(df, lmax=10, mmax=10, power=False, delta=False, if topn and ix > topn: break - - vmax = None - vmin = None - ix = 1 - for date, plot in plots: - fig = plt.figure() - fig.set_facecolor('black') - #fig.set_edgecolor('white') - if vmax is None: - vmax = np.percentile(plot, 95.) - vmin = np.percentile(plot, 5.) - print('vmax/vmin', vmax, vmin) - - - - print(date, plot.min(), plot.max(), plot.mean()) - #ax = fig.add_axes((0,0,1,1), projection='mollweide') - ax = fig.add_subplot(2, 1, 1, - projection='mollweide') - lon = np.linspace(-np.pi, np.pi, plot.shape[1]) - lat = np.linspace(-np.pi/2, np.pi/2, plot.shape[0]) - lon, lat = np.meshgrid(lon, lat) - ax.pcolormesh(lon, lat, plot[::-1], cmap=plt.cm.jet, - vmax=vmax, vmin=vmin) - ax.set_title(str(date), color='white') - ax.axis('off') - key = (date.month, date.day, date.hour) - ax = fig.add_subplot(2, 1, 2, - projection='mollweide') - - xxxx = df.totals[key][1:] - lon = np.linspace(-np.pi, np.pi, xxxx.shape[1]) - lat = np.linspace(-np.pi/2, np.pi/2, xxxx.shape[0]) - lon, lat = np.meshgrid(lon, lat) - ax.axis('off') - ax.pcolormesh(lon, lat, xxxx[::-1], cmap=plt.cm.jet) - #vmax=vmax, vmin=vmin) - - plt.grid(True) - - - plt.show() - #for x in range(5): - # print('sleeping..', x) - # time.sleep(1) - print(f'FULL SET OF SPECTRA {len(spectra)} {len(spectra[0])}') return spectra @@ -371,7 +363,7 @@ async def run(self): print('TPOT filled, away we go') print(self.A) print(self.P0) - self.stew(iters=100, epsilon=2.0) + self.stew(iters=1, epsilon=2.0) plot = gamma_plot(self) await self.queue.put(plot) @@ -381,7 +373,7 @@ async def run(self): #for x in self.GAMMA[:10]: # print(f'Gamma: {x}') - await curio.sleep(10) + await curio.sleep(1) @@ -467,23 +459,30 @@ def main(): args = parser.parse_args() - df = ncdf.CircularField(**args.__dict__) - df.filter_stamps(hour=args.hour, day=args.day) + curio.run(run(args)) - if args.plot: - plots(df) - return +async def run(args): - topn = 20 - #stamp_stats(df.stamps) - spectra = np.array(generate_spectra( - df, - **args.__dict__)) - print(f'spectra zero shape {spectra[0].shape}') + farm = magic.PigFarm() + + carpet = await farm.carpet() + iq, width, height = await carpet.add_queue('spectra') + + await farm.start_tasks() + + dargs = args.__dict__ + df = ncdf.CircularField(**dargs) + + df.filter_stamps(hour=args.hour, day=args.day) + #stamp_stats(df.stamps) + spectra = await generate_spectra(df, iq, **dargs) + spectra = np.array(spectra) + print(f'spectra zero shape {spectra[0].shape}') + # fixme - save spectra somewhere and do faster load. # cf repeatability too. # maybe just normalise spectra? @@ -492,18 +491,11 @@ def main(): stats(nspectra) spectra = nspectra - curio.run(run(spectra, args.nstates)) - -async def run(spectra, nstates): - + print(f'spectra zero shape {spectra[0].shape}') # TeaPlotter tea_plotter = TeaPlot(spectra=spectra, - nstates=nstates) - - farm = magic.PigFarm() + nstates=args.nstates) - carpet = farm.carpet() - iq, width, height = await carpet.add_queue('teaplot') print(f'image queue {width} {height}') From c13c4c0ce736a3e254ee8ba70cf37274badfd0c4 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 30 Jul 2019 17:51:46 -0400 Subject: [PATCH 560/642] more async plotting in sha --- karmapi/sha.py | 100 +++++-------------------------------------------- 1 file changed, 9 insertions(+), 91 deletions(-) diff --git a/karmapi/sha.py b/karmapi/sha.py index 7b369e3..f9958d7 100644 --- a/karmapi/sha.py +++ b/karmapi/sha.py @@ -31,27 +31,6 @@ def spectrum(value): return clm, pyshtools.spectralanalysis.spectrum(clm) -def molly(xxxx, ax=None, vmax=None, vmin=None): - """ yet another plot """ - if vmax is None: - vmax = xxxx.max() - vmin = xxxx.min() - - if ax is None: - fig = plt.figure() - - ax = fig.add_axes((0,0,1,1), projection='mollweide') - lon = np.linspace(-np.pi, np.pi, xxxx.shape[1]) - lat = np.linspace(-np.pi/2, np.pi/2, xxxx.shape[0]) - lon, lat = np.meshgrid(lon, lat) - ax.pcolormesh(lon, lat, xxxx[::-1], cmap=plt.cm.jet, - vmin=vmin, vmax=vmax) - - # the next two don't belong here - plt.grid(True) - plt.show() - - async def generate_spectra(df, queue=None, lmax=10, mmax=10, power=False, delta=False, month=None, topn=0, **kwargs): @@ -96,6 +75,7 @@ async def generate_spectra(df, queue=None, plot = xxxx #print(type(xxxx), xxxx.shape) + #if True: if date.month == month: print('lmax:', lmax) @@ -150,70 +130,6 @@ async def generate_spectra(df, queue=None, return spectra -def plots(df): - - last = None - - spectra = [] - for date, value in df.generate_data(): - print(date) - - if last is None: - last = value - continue - - delta = last - value - - clm, spect = spectrum(delta) - spectra.append(spect) - - #print(f'SPECT {spect.cumsum()/spect.sum()}') - - if date >= datetime.datetime(1990, 1, 1): - break - - #continue - - plt.plot(spect.cumsum()/spect.sum()) - plt.grid(True) - plt.show() - - - grid = pyshtools.SHCoeffs.from_random(spect).expand() - plt.subplot(1, 3, 1) - plt.imshow(grid.to_array()) - - plt.subplot(1, 3, 2) - plt.imshow(delta) - - print(type(clm)) - #clm[:,:,20:] = 0.0 - fgrid = pyshtools.expand.MakeGridDH(clm) - plt.subplot(1, 3, 3) - plt.imshow(fgrid) - break - - #plt.plot(power[3:]) - #plt.grid(True) - #plt.plot(power) - - plt.title(date) - plt.imshow(grid) - break - - last = value - - - - - plt.show() - - sp = np.array(spectra) - - print(sp.mean(axis=0)) - print(sp.var(axis=0)) - print(sp.shape) - def stats(data): """ Return some standard stats """ print("DATA STATS (shape, mean, var, percentiles)") @@ -369,7 +285,7 @@ async def run(self): await self.queue.put(plot) print(f'q size {self.queue.qsize()}') - + #for x in self.GAMMA[:10]: # print(f'Gamma: {x}') @@ -435,6 +351,8 @@ def rebrew(tplot): """ Do re-estimation """ # re-estimate states based on gamma states = lager(tplot) + for state in states: + print('State:', state) observations, B = make_bmatrix(tplot.spectra, states) @@ -467,10 +385,12 @@ async def run(args): farm = magic.PigFarm() - carpet = await farm.carpet() + carpet = await farm.create_carpet() iq, width, height = await carpet.add_queue('spectra') - await farm.start_tasks() + await farm.start() + + runner = await curio.spawn(farm.run()) dargs = args.__dict__ df = ncdf.CircularField(**dargs) @@ -504,9 +424,7 @@ async def run(args): farm.piglets.appendleft(tea_plotter) - await farm.start() - await farm.run() - + await runner.join() From 218a7239e69c54c66226af3ed5ac5ce4f637e37d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 2 Aug 2019 21:14:39 -0400 Subject: [PATCH 561/642] adapt with blume magic grid --- karmapi/sha.py | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/karmapi/sha.py b/karmapi/sha.py index f9958d7..870e6ad 100644 --- a/karmapi/sha.py +++ b/karmapi/sha.py @@ -76,15 +76,17 @@ async def generate_spectra(df, queue=None, #print(type(xxxx), xxxx.shape) #if True: + perc = np.percentile if date.month == month: print('lmax:', lmax) if vmax is None: - vmax = np.percentile(plot, 95.) - vmin = np.percentile(plot, 5.) + vmax = perc(plot, 95.) + vmin = perc(plot, 5.) print('vmax/vmin', vmax, vmin) - print(date, plot.min(), plot.max(), plot.mean()) + print(date, perc(plot, 5), + perc(plot, 95), plot.mean()) fig.clear() @@ -386,11 +388,14 @@ async def run(args): farm = magic.PigFarm() carpet = await farm.create_carpet() - iq, width, height = await carpet.add_queue('spectra') + iq = curio.UniversalQueue() + await carpet.set_incoming(iq) + await carpet.more() + await carpet.more() - await farm.start() + await farm.start_tasks() - runner = await curio.spawn(farm.run()) + #runner = await curio.spawn(farm.run()) dargs = args.__dict__ df = ncdf.CircularField(**dargs) @@ -416,15 +421,19 @@ async def run(args): tea_plotter = TeaPlot(spectra=spectra, nstates=args.nstates) - iq, width, height = await carpet.add_queue('teaplot') - print(f'image queue {width} {height}') print(f'image queue id {id(iq)}') tea_plotter.queue = iq farm.piglets.appendleft(tea_plotter) + print('STARTING TEA PLOT') + await tea_plotter.start() - await runner.join() + tplot_task = await curio.spawn(tea_plotter.run()) + + print(tplot_task) + + await tplot_task.join() From d0271c6edaab60cc4c1fab5b1f9c49039ec1ffb7 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 8 Aug 2019 16:56:53 -0400 Subject: [PATCH 562/642] adapt sha to changing blume --- karmapi/sha.py | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/karmapi/sha.py b/karmapi/sha.py index 870e6ad..e73846a 100644 --- a/karmapi/sha.py +++ b/karmapi/sha.py @@ -77,7 +77,7 @@ async def generate_spectra(df, queue=None, #if True: perc = np.percentile - if date.month == month: + if not month or date.month == month: print('lmax:', lmax) if vmax is None: @@ -91,7 +91,7 @@ async def generate_spectra(df, queue=None, fig.clear() #ax = fig.add_axes((0,0,1,1), projection='mollweide') - ax = fig.add_subplot(2, 1, 1, + ax = fig.add_subplot(1, 1, 1, projection='mollweide') lon = np.linspace(-np.pi, np.pi, plot.shape[1]) lat = np.linspace(-np.pi/2, np.pi/2, plot.shape[0]) @@ -101,17 +101,19 @@ async def generate_spectra(df, queue=None, ax.set_title(str(date), color='white') ax.axis('off') key = (date.month, date.day, date.hour) - ax = fig.add_subplot(2, 1, 2, - projection='mollweide') - xxxx = df.totals[key][1:] - lon = np.linspace(-np.pi, np.pi, xxxx.shape[1]) - lat = np.linspace(-np.pi/2, np.pi/2, xxxx.shape[0]) - lon, lat = np.meshgrid(lon, lat) - ax.axis('off') + if False: + ax = fig.add_subplot(2, 1, 2, + projection='mollweide') - ax.pcolormesh(lon, lat, xxxx[::-1], cmap=plt.cm.jet) - #vmax=vmax, vmin=vmin) + xxxx = df.totals[key][1:] + lon = np.linspace(-np.pi, np.pi, xxxx.shape[1]) + lat = np.linspace(-np.pi/2, np.pi/2, xxxx.shape[0]) + lon, lat = np.meshgrid(lon, lat) + ax.axis('off') + + ax.pcolormesh(lon, lat, xxxx[::-1], cmap=plt.cm.jet) + #vmax=vmax, vmin=vmin) plt.grid(True) @@ -385,17 +387,23 @@ def main(): async def run(args): - farm = magic.PigFarm() + farm = magic.Farm() + + carpet = magic.Carpet() + farm.add(carpet, background=True) - carpet = await farm.create_carpet() + # ?? + farm.event_map.update(carpet.event_map) + iq = curio.UniversalQueue() await carpet.set_incoming(iq) + await carpet.set_outgoing(farm.hatq) await carpet.more() await carpet.more() - await farm.start_tasks() + await farm.start() - #runner = await curio.spawn(farm.run()) + runner = await curio.spawn(farm.run()) dargs = args.__dict__ df = ncdf.CircularField(**dargs) @@ -425,7 +433,6 @@ async def run(args): print(f'image queue id {id(iq)}') tea_plotter.queue = iq - farm.piglets.appendleft(tea_plotter) print('STARTING TEA PLOT') await tea_plotter.start() From 9334fb3b2c5414c40d28e66a01d654cd2effe7d9 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 21 Aug 2019 16:43:28 -0400 Subject: [PATCH 563/642] celestial update and the hatching of a plan --- docs/nodice/plates.rst | 46 +++++++++++++++++++++++++++++++++++++----- karmapi/grb.py | 9 ++++++++- karmapi/sha.py | 6 ++++-- 3 files changed, 53 insertions(+), 8 deletions(-) diff --git a/docs/nodice/plates.rst b/docs/nodice/plates.rst index 85796b2..4ddc5b4 100644 --- a/docs/nodice/plates.rst +++ b/docs/nodice/plates.rst @@ -40,12 +40,12 @@ way. Closer inspection shows a veritable galactic rotation curve. -Watch a little longer and there is an and at the centre of the vortex. +Watch a little longer and there is an ant at the centre of the vortex. -It's a bit ant, around 1.5cm long. And it is spinning like mad with +It's a big ant, around 1.5cm long. And it is spinning like mad with the same angular velocity as the rest of the vortex. -Sometimes there is a wobble and the and gets off centre, spinning +Sometimes there is a wobble and the ant gets off centre, spinning rapidly. It rapidly spirals outwards, with its rotation decreasing in the @@ -61,7 +61,7 @@ the mysterious gravitational waves. Is it possible that the time interval between observing a new galaxy arriving at the edge of our visible universe and the detection of a gravitational wave from the same, rises as the mass of the black hole -does. +does? The key observation is the extent to which the black hole can slow down time, or rather the distance at which its inertial drag on time @@ -69,7 +69,7 @@ is no longer notable. So it is possible that the time interval in between a gamma ray burst and the detection of the gravity wave from same rises as the central -mass does, posibly rather significantly. +mass does, posibly rather significantly? An excellent source of information on gravitational wave information for the current operational run can be found here:: @@ -90,3 +90,39 @@ One paper was suggesting we may be seeing reflections from the sun (I tend to think this is likely, with also interference from Jupiter.) But baby steps. + +More detections +=============== + +It is now August 16th. + +Since June 30th, there have been about one or two detections per week. + +The most recent detection was on the August 14th. + +I have been following the reports. This global reporting +collaboration is fascinating. + +As far as I can tell, most of the collisions detected have been +between larger (10-100 solar mass) bodies. + +I believe there have been some collisions involving smalle (less than +3 solar masses?), which would have been neutron star collisions, where +we might hope to see coincident radiation in other spectra. + +Whatever the source of the wrinkles, their shape is characteristic. + +An oscillation that slowly (over 1-100 seconds) rises in both +frequency and intensity, until it hits a sharp peak and is followed by +a settling down, or ring-down. + +Plan +==== + +Visualisation of local galaxies and solar system objects. + +Raw signals for full set of observations. + +Localisation information. + +Model for new arrival. diff --git a/karmapi/grb.py b/karmapi/grb.py index 1aae364..ba79298 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -544,7 +544,14 @@ def gravity_waves(path): rows.append(row) return rows - + +def near_galaxies(): + """ parse galaxy.txt from + + https://heasarc.gsfc.nasa.gov/w3browse/all/neargalcat.html + + """ + pass if __name__ == '__main__': diff --git a/karmapi/sha.py b/karmapi/sha.py index e73846a..ce6690b 100644 --- a/karmapi/sha.py +++ b/karmapi/sha.py @@ -38,7 +38,7 @@ async def generate_spectra(df, queue=None, print('Calculating means across years') df.sum_years() print('Done means across years') - + spectra = [] last = None lastdate = None @@ -440,7 +440,9 @@ async def run(args): print(tplot_task) - await tplot_task.join() + await runner.join() + + tplot_task.cancel() From 20e4d8fdcdd1f65cedf24807309df71015e5eb12 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 22 Aug 2019 19:53:58 -0400 Subject: [PATCH 564/642] make sense_hat module optional for sense --- karmapi/sense.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/karmapi/sense.py b/karmapi/sense.py index e4af246..6504530 100644 --- a/karmapi/sense.py +++ b/karmapi/sense.py @@ -38,7 +38,10 @@ import sense_hat except: # see if sense hat emulator is around - import sense_emu as sense_hat + try: + import sense_emu as sense_hat + except: + print('No sense hat libraries') def stats(hat): From 66a8959663e473edef39f930eac32aad90fc3981 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 22 Aug 2019 19:54:32 -0400 Subject: [PATCH 565/642] use blume table in pigfarm --- karmapi/pigfarm.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/karmapi/pigfarm.py b/karmapi/pigfarm.py index b3d5371..61a4a6d 100644 --- a/karmapi/pigfarm.py +++ b/karmapi/pigfarm.py @@ -668,7 +668,7 @@ def draw_table( """ Draw a table on the axes """ from matplotlib import colors, cm, table - from mpltable.table import table + from blume.table import table norm = colors.Normalize() stats, cells, rows, cols = self.frame_to_stats(data) @@ -697,7 +697,7 @@ def draw_table( cellColours=colours, cellEdgeColours=colours, edges=['TL'], - max_col_label_width=0.1, + #max_col_label_width=0.1, bbox=bbox, loc=loc) From ffab2956e780dceb5db1f9039be5b70f9973969c Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 30 Aug 2019 16:10:44 -0400 Subject: [PATCH 566/642] start switching cpr to blume magic --- karmapi/cpr.py | 91 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 73 insertions(+), 18 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 57c69c3..8fce6ac 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -152,7 +152,9 @@ from PIL import Image, ImageTk -from karmapi import base, tpot, prime, pigfarm +from karmapi import tpot, prime, pigfarm + +from blume import magic, mclock2 from random import random, randint, gauss, shuffle @@ -668,7 +670,7 @@ def sample_wave(phase, x): -class NestedWaves(pigfarm.Yard): +class NestedWaves(magic.Ball): """ Inner and outer spheres simulated annealing inspired in between? @@ -681,10 +683,10 @@ class NestedWaves(pigfarm.Yard): and draw slices on the canvas from the yard. """ - def __init__(self, parent, balls=None, fade=1, twist=True): + def __init__(self, balls=None, fade=1, twist=True): """ Initialise the thing """ - super().__init__(parent) + super().__init__() # expect we'll find something to do with a queue #self.uq = curio.UniversalQueue() @@ -694,7 +696,10 @@ def __init__(self, parent, balls=None, fade=1, twist=True): self.fade = fade self.twist = twist + # interesting -- already magic roundabout could help. self.build(balls) + + # event handling self.add_event_map(' ', self.pause) self.paused = False self.add_event_map('r', self.reset) @@ -710,6 +715,13 @@ def __init__(self, parent, balls=None, fade=1, twist=True): self.add_event_map('w', self.more_wakey) self.add_event_map('t', self.toggle_twist) + self.sleep = 0.05 + + + def add_event_map(self, key, coro): + + self.event_map[key] = coro + async def lessfade(self): """ Decrease r exponent """ @@ -862,6 +874,18 @@ def draw(self): self.draw_ball(ball) + + async def publish(self, ball): + + width, height = self.width, self.height + + image = ball.project(self.views[self.view]) + + #image = image[::, ::, 1] + image = Image.fromarray(image) + image = image.resize((int(width), int(height))) + + await self.outgoing.put(image) def draw_ball(self, ball): """ wc has everything???? @@ -899,19 +923,19 @@ async def cancel(self): await ball.cancel() - async def run(self): + async def runner(self): """ Run the waves """ - self.sleep = 0.05 - self.set_background() #await self.random_step_some() + self.spheres spheres = await self.start_balls_running() - print('NESTED WAVES RUNNING') + + print('NESTED WAVES Running') while True: try: if self.paused: @@ -1177,23 +1201,54 @@ def args_to_spheres(args): return spheres - -def main(): - - parser = argument_parser() - - args = parser.parse_args() - +async def run(args): + # pass list of balls into NestedWaves spheres = args_to_spheres(args) - farm = pigfarm.sty(NestedWaves, dict( + farm = magic.Farm() + + waves = NestedWaves( balls=spheres, fade=args.fade, - twist=args.twist), play=args.play) + twist=args.twist) + + farm = magic.Farm() + + clock = mclock2.GuidoClock() + + carpet = magic.Carpet() + + iq = curio.UniversalQueue() + await carpet.set_incoming(iq) + await carpet.set_outgoing(farm.hatq) + + farm.event_map.update(clock.event_map) + farm.event_map.update(carpet.event_map) - curio.run(farm.run, with_monitor=True) + await waves.set_outgoing(iq) + await clock.set_outgoing(iq) + waves.incoming = None + clock.incoming = None + farm.add(carpet, background=True) + farm.add(waves) + farm.add(clock) + + + starter = await curio.spawn(farm.start()) + + print('farm runnnnnnnnnning') + runner = await farm.run() + + +def main(): + + parser = argument_parser() + + args = parser.parse_args() + + curio.run(run(args), with_monitor=True) if __name__ == '__main__': From 59800fb1fc8ea6d9b3bd578aabbac6aebe1ccc85 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 6 Sep 2019 13:13:07 -0400 Subject: [PATCH 567/642] noodlings on expanding and contracting fieds --- docs/nodice/exandcon.rst | 78 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 docs/nodice/exandcon.rst diff --git a/docs/nodice/exandcon.rst b/docs/nodice/exandcon.rst new file mode 100644 index 0000000..882b38d --- /dev/null +++ b/docs/nodice/exandcon.rst @@ -0,0 +1,78 @@ +=========================== + Expanding and contracting +=========================== + +*de Sitter space* is proposed in [1] as a model for the universe. + +Within this space, time-like geodesics follow two distinct fields, +expanding and contracting fields. + +This is perhaps one of the harder parts of the theory to picture. + +Satelite loops of water vapour in the earth's atmosphere may help with +this. + +This site has excellent animations: + + https://www.tropicaltidbits.com/sat/satlooper.php?region=atl&product=ir + +Find an area where there is a tropical cyclone, and note how it both +sucks in moisture from the surroundings, with a distinct in-flow as +well as a distinct outflow. + +A strong cyclone viewed from space has a striking resemblence to a +spiral galaxy. + +So imagine instead of a thin slice of the earth's atmposphere, the +picture is a just a slice of a giant three dimensional space of +galaxies. + +Each cyclone, now a galaxy. + +Now we see how the giant masses at the galactic centres suck in matter +from the surroundings, way beyond the visible galaxy. + +So what of the increasing red shift as we get deeper into the galaxy, +does that not mean that those galaxies are receding faster? + +Or is that just how space time works? + +Remember the galaxy is saturated, in fact appears to be in an almost +perfect equilibrium, like clouds of water vapour in our atmosphere. + +Surely it is just the case, the further light travels the more it is +red shifted by the intervening matter? An inertial drag that matter +has on space time. + + +How does this square with gamma ray bursts? +=========================================== + +A stream of photons from beyond the Hubble distance ends up slowed to +a crawl by the intervening matter, so it bursts on the scene, then +rapidly decays to a distant red? + +When our path crosses such a stream we get the rapid burst before +things settle down and we have a new distant arrival. + +Why so? The intervening matter modulates the signal, adds harmonics? + +Space time is tidal! + + + +Postscript +========== + +For some while I have been puzzling over how the universe is could be +in a steady state, with balanced expanding and contracting fields. + +I had been focussing on the gamma ray bursts and representing new +arrivals in our visible universe, but puzzling why all arrivals are so +distance and things could possibly be in balance? + +Now things make sense. The redshift is just an artifact of matter. + +I also note that the interpretation of + +[1] Another paradigm for the universe. From d4dd10f632887c9c98fe94a44b780476d0b48f56 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 6 Sep 2019 14:18:18 -0400 Subject: [PATCH 568/642] shurely shome mishtake in exandcon? --- docs/nodice/exandcon.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/nodice/exandcon.rst b/docs/nodice/exandcon.rst index 882b38d..21b46ac 100644 --- a/docs/nodice/exandcon.rst +++ b/docs/nodice/exandcon.rst @@ -44,6 +44,8 @@ Surely it is just the case, the further light travels the more it is red shifted by the intervening matter? An inertial drag that matter has on space time. +What am I missing? This seems so simple. + How does this square with gamma ray bursts? =========================================== From 57747b5403f2a14d1b4916ac5c7b02d0e6f6381b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 7 Sep 2019 16:18:52 -0400 Subject: [PATCH 569/642] expanding and contracting expanding in scope --- docs/nodice/exandcon.rst | 210 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 200 insertions(+), 10 deletions(-) diff --git a/docs/nodice/exandcon.rst b/docs/nodice/exandcon.rst index 21b46ac..9873984 100644 --- a/docs/nodice/exandcon.rst +++ b/docs/nodice/exandcon.rst @@ -4,7 +4,7 @@ *de Sitter space* is proposed in [1] as a model for the universe. -Within this space, time-like geodesics follow two distinct fields, +Within this space, time-like geodesics follow two distinct fields: expanding and contracting fields. This is perhaps one of the harder parts of the theory to picture. @@ -23,6 +23,10 @@ well as a distinct outflow. A strong cyclone viewed from space has a striking resemblence to a spiral galaxy. +A fuller 3-dimensional view would look more like a cooling tower, +it's base, at ocean level, sucking in matter and it's top, up in the +atmosphere, ejecting the same, with a whirling vortex in between. + So imagine instead of a thin slice of the earth's atmposphere, the picture is a just a slice of a giant three dimensional space of galaxies. @@ -30,12 +34,17 @@ galaxies. Each cyclone, now a galaxy. Now we see how the giant masses at the galactic centres suck in matter -from the surroundings, way beyond the visible galaxy. +from the surroundings, way beyond the visible galaxy. In essence, +they clear space, allowing light to pass. + +Now the progess of that light is modulated by the intervening matter, +the vast majority of which lies at the centre of, or close to, a galaxy. So what of the increasing red shift as we get deeper into the galaxy, does that not mean that those galaxies are receding faster? -Or is that just how space time works? +Is not that just how space time works, when you saturate it with giant +rotating masses? Remember the galaxy is saturated, in fact appears to be in an almost perfect equilibrium, like clouds of water vapour in our atmosphere. @@ -44,11 +53,7 @@ Surely it is just the case, the further light travels the more it is red shifted by the intervening matter? An inertial drag that matter has on space time. -What am I missing? This seems so simple. - - -How does this square with gamma ray bursts? -=========================================== +Now how does this all square with gamma ray bursts? A stream of photons from beyond the Hubble distance ends up slowed to a crawl by the intervening matter, so it bursts on the scene, then @@ -61,8 +66,81 @@ Why so? The intervening matter modulates the signal, adds harmonics? Space time is tidal! +Returning to cyclones, it is worth further noting the space where this +all takes place: a thin shell, above the earth's surface. + +One dimension of time, two of space and a thin slice of a third +dimension. Harmonics emerge around the globe. + +At the surface matter moving with the earth, but at the edge of space, +starting to move with space itself, or at least closer to the local +inertial field, away from some of the spin. + +Space time? +=========== + +What exactly is that? + +Here I am concerned, primarily, with the propogation of light through +space time. + +Making these assumptions: + +* matter both modulates and defines the space time through which light + travels. + +* in the language of [1] it creates inertial frames which define the + geodesics for electromagnetic waves to follow. + +* the universe is pretty much the same everywhere. + +* local galaxy velocities of around 300 km/3, or about c * 10-3, where + c is the spee of light. +* a rotating mass drags the inertial field by amound proportional to + the mass times its angular velocity, that drops of with the 1/R + where R is the distance from the mass. +* the universe is almost exactly saturated, in the sense that its + volume is equal to the total volume of space we get by summing the + space associated with each galaxy. + +* this latter we do by summing the volume over which each galaxy's + field remains contractive. + +Less precisely, but hopefully more intuitively, take for example our +sun. There is a point in space where matter is beyond the sun's +influence. Inside this radius, matter can (and does) slowly drift +inward towards the sun. Outside it just drifts by and moves further +and further away. It is the same with galaxies, but they come with +10**10 or more solar masses at the centre. + +The point of all this is that all light passing through the universe +is spending much of it's journey having its passage modulated by some +nearby galaxy. + +Now this modulation is what we call the expansion of space time. It +is an expansion, in the sense that the mass in the region is twisting +the fabric in on itself, space in a sense is denser, like an Escher +painting. + +As light travels through this fabric it is inevitably slowed and +shifted to the red. + +Then there is lensing to consider. Not only will the intervening +matter modulate the signal, it will change it's direction and focus +the signal. + +What we observe here on earth is the sum over time of the modulations +of the incoming wave. Most of the time we just see a low glow, +Stretched out photons that zoom by. + +But as we fall into the same path as a focussed beam and we too follow +that beam, then we see a gamma ray burst. + +The merger of our path with some source can, and general is, a +dramatic event. + Postscript ========== @@ -75,6 +153,118 @@ distance and things could possibly be in balance? Now things make sense. The redshift is just an artifact of matter. -I also note that the interpretation of +I also note that the interpretation of + +Status Update +============= + +On the software side, I have split some parts of karmapi off into +another project, I am calling *blume*. + +I've found a great library for doing simple harmonic analysis. + +I've successfully used that to do transforms on global temperature +data and started to fit models. + +I'm literally going round in circles with *blume*, juggling Balls with +graphs and queues too. + +Once I have this magic working then I can get back to plotting and +simulating galaxies. + +I've been following the ongoing LIGO and Virgo runs. See here:: + + https://gracedb.ligo.org/latest + +As far as I can tell, neutron star merges have been pretty rare so +far. + +There has also been a lack of events where coincident observations, +such as gamma ray bursts, have been made. + +Sky localisation is now routine for events with some excellent +exhibits being produced:: + + https://gracedb.ligo.org/superevents/S190828j/view/ + + https://gracedb.ligo.org/superevents/S190828l/view/ + + +All this stuff is working using triangulation based on time +differences of arrival at the three detectors in operation. + +It all looks very sound. Note the two above look to be at about the +same time and coming from the same part of the sky, but that is just +because detector sensitivity varies according to the current +orientation of the detectors to that part of the sky. [aside: +important to know more about this to better understand variations in +detection rates]. + +Not only do we get the coordinates, we get pretty good distance +estimates. Which should help those looking for nearby galaxies. + +Further, this in turn will help refine estimations of the Hubble +constant. + +However, I think that rather than being the source of the signal, we +are finding the location of the lens that focussed the signal. + +Which recalls something I read about short and long gamma ray bursts:: + + We present a detailed investigation of Hubble Space Telescope + rest-frame UV/optical observations of 22 short gamma-ray burst (GRB) + host galaxies and sub-galactic environments. Utilizing the high + angular resolution and depth of HST we characterize the host galaxy + morphologies, measure precise projected physical and host-normalized + offsets between the bursts and host centers, and calculate the + locations of the bursts with respect to their host light + distributions (rest-frame UV and optical). We calculate a median + short GRB projected physical offset of 4.5 kpc, about 3.5 times + larger than that for long GRBs, and find that ≈25% of short GRBs + have offsets of >= 10 kpc. + + When compared to their host sizes, the median offset is 1.5 + half-light radii (re ), about 1.5 times larger than the values for + long GRBs, core-collapse supernovae, and Type Ia supernovae. In + addition, ≈20% of short GRBs having offsets of >= 5re , and only + ≈25% are located within 1re. + + We further find that short GRBs severely under-represent their + hosts' rest-frame optical and UV light, with ≈30%-45% of the bursts + located in regions of their host galaxies that have no detectable + stellar light, and ≈55% in the regions with no UV light. + + Therefore, short GRBs do not occur in regions of star formation or + even stellar mass. This demonstrates that the progenitor systems of + short GRBs must migrate from their birth sites to their eventual + explosion sites, a signature of kicks in compact object binary + systems. Utilizing the full sample of offsets, we estimate natal + kick velocities of ≈20-140 km s–1. These independent lines of + evidence provide the strongest support to date that short GRBs + result from the merger of compact object binaries (NS-NS/NS-BH). + + We calculate a median short GRB projected physical offset of 4.5 + kpc, about 3.5 times larger than that for long GRBs, and find that + ≈25% of short GRBs have offsets of >= 10 kpc. When compared to their + host sizes, the median offset is 1.5 half-light radii (re ), about + 1.5 times larger than the values for long GRBs, + + https://iopscience.iop.org/article/10.1088/0004-637X/776/1/18 + +The paragraph beginning *Therefore,* can largely be ignored. + +What is happening is light from a distant galaxy being focussed by the +so called *host* galaxies. + +Longer gamma ray bursts are typically 1.5 light radii away from +galactic centre, with short gamma ray bursts 4.5 light radii away. + +This is to be expected, the more powerful long bursts are in part a +result of the more intense lensing closer to the galactic centre. + +I believe we may well be seeing the same phenomenom with gravitational +waves. + + +[1] Another paradigm for the universe. Colin Rourke. -[1] Another paradigm for the universe. From ed771e18d361a4631e0bd5238d66aede282b1edb Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 15 Sep 2019 15:59:43 -0400 Subject: [PATCH 570/642] cope with missing pandas and more blume in sha --- docs/nodice/exandcon.rst | 57 ++++++++++++++++++++++++++++++++++------ karmapi/base.py | 7 +++-- karmapi/sha.py | 26 +++++++++--------- 3 files changed, 67 insertions(+), 23 deletions(-) diff --git a/docs/nodice/exandcon.rst b/docs/nodice/exandcon.rst index 9873984..8df195e 100644 --- a/docs/nodice/exandcon.rst +++ b/docs/nodice/exandcon.rst @@ -7,10 +7,12 @@ Within this space, time-like geodesics follow two distinct fields: expanding and contracting fields. +[Incorrect at the second sentence]. + This is perhaps one of the harder parts of the theory to picture. Satelite loops of water vapour in the earth's atmosphere may help with -this. +this This site has excellent animations: @@ -55,6 +57,25 @@ has on space time. Now how does this all square with gamma ray bursts? +The distortion of space time that giant masses create is move complex +than described above, it contains both expansive and contractive +fields. + +One way to look at this is imaging a 3-dimentsional lattice, with +nodes of the lattice evenly spaced. + +Pick a point and apply a twist to the lattice. This distorts the +lattice near the twisting point, lattice cubes become lozenge shaped. + +Overall, the contractions and expansions of the lattice balance out. + +Now photons following the contractive field will tend to bunch up, in +effect they are blue shifted. When we observe the result of this, +light from a source generated over billions of years, arrives in a +very short period of time, before reverting to the expanding field (it +is not possible for a gamma ray burst to last a long period of time +without breaking causality. + A stream of photons from beyond the Hubble distance ends up slowed to a crawl by the intervening matter, so it bursts on the scene, then rapidly decays to a distant red? @@ -64,7 +85,9 @@ things settle down and we have a new distant arrival. Why so? The intervening matter modulates the signal, adds harmonics? -Space time is tidal! +Further note that there is evidence from the harmonics in the CMB that +space time is tidal. We should factor out these tides to help our +understanding of the observations we see. Returning to cyclones, it is worth further noting the space where this all takes place: a thin shell, above the earth's surface. @@ -79,8 +102,6 @@ inertial field, away from some of the spin. Space time? =========== -What exactly is that? - Here I am concerned, primarily, with the propogation of light through space time. @@ -132,8 +153,8 @@ matter modulate the signal, it will change it's direction and focus the signal. What we observe here on earth is the sum over time of the modulations -of the incoming wave. Most of the time we just see a low glow, -Stretched out photons that zoom by. +of the incoming wave. Much of the time we just see the low glow of +the cosmic microwave background, stretched out photons that zoom by. But as we fall into the same path as a focussed beam and we too follow that beam, then we see a gamma ray burst. @@ -251,7 +272,9 @@ Which recalls something I read about short and long gamma ray bursts:: https://iopscience.iop.org/article/10.1088/0004-637X/776/1/18 -The paragraph beginning *Therefore,* can largely be ignored. +The paragraph beginning *Therefore,* can largely be ignored, other +than noting that GRBs do not sem to occur in regions of star +formation. What is happening is light from a distant galaxy being focussed by the so called *host* galaxies. @@ -265,6 +288,24 @@ result of the more intense lensing closer to the galactic centre. I believe we may well be seeing the same phenomenom with gravitational waves. +Summary +======= + +It is important to keep in mind that the light waves that we see from +distant galaxies are just that, photons on a journey from a distant +source. + +The fact that these arrive tired, and red-shifted tells us their +journey has been expansive, in short the intervening matter is +creating an expansive field as far as light propogation is concerned. + +Now think of a distant source, think of it in its terms, trying to +shine a torch on earth. + +At some point it is so far from earth it can't reach it. Or rather, +source and destination are swirling around too much and any photons +get blurred out. -[1] Another paradigm for the universe. Colin Rourke. +[1] Another paradigm for the universe. Colin Rourke. aka "The Book +of magic." diff --git a/karmapi/base.py b/karmapi/base.py index 4186f1b..f7b1b4d 100644 --- a/karmapi/base.py +++ b/karmapi/base.py @@ -17,8 +17,11 @@ from collections import defaultdict from operator import itemgetter -import pandas -fft = pandas.np.fft +try: + import pandas + fft = pandas.np.fft +except: + print('NO PANDAS') from karmapi import flash diff --git a/karmapi/sha.py b/karmapi/sha.py index ce6690b..f75ecb8 100644 --- a/karmapi/sha.py +++ b/karmapi/sha.py @@ -389,29 +389,30 @@ async def run(args): farm = magic.Farm() - carpet = magic.Carpet() - farm.add(carpet, background=True) - - # ?? - farm.event_map.update(carpet.event_map) - - iq = curio.UniversalQueue() - await carpet.set_incoming(iq) - await carpet.set_outgoing(farm.hatq) + carpet = farm.carpet await carpet.more() await carpet.more() + farm.setup() await farm.start() runner = await curio.spawn(farm.run()) + # FIXME: fix so teapot waits on a queue for spectra + # need a queue where None means end of data? + # + # And have it all just working as edges in the farm + + # magic to go from argparse to a dict dargs = args.__dict__ + + # Now passed in as keywords df = ncdf.CircularField(**dargs) df.filter_stamps(hour=args.hour, day=args.day) #stamp_stats(df.stamps) - spectra = await generate_spectra(df, iq, **dargs) + spectra = await generate_spectra(df, carpet.incoming, **dargs) spectra = np.array(spectra) print(f'spectra zero shape {spectra[0].shape}') @@ -430,8 +431,7 @@ async def run(args): nstates=args.nstates) - print(f'image queue id {id(iq)}') - tea_plotter.queue = iq + tea_plotter.queue = carpet.incoming print('STARTING TEA PLOT') await tea_plotter.start() @@ -442,7 +442,7 @@ async def run(args): await runner.join() - tplot_task.cancel() + await tplot_task.cancel() From 26c8a0c0e603e36ecd5b4e6aa10a389ba0e10f0d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 1 Oct 2019 16:11:01 -0400 Subject: [PATCH 571/642] expanding and contracting blume meets grb --- docs/nodice/exandcon.rst | 28 ++++++++++ karmapi/cpr.py | 33 +++--------- karmapi/grb.py | 55 +++++++++++++------- karmapi/sha.py | 110 +++++++++++++++++++++++++-------------- 4 files changed, 141 insertions(+), 85 deletions(-) diff --git a/docs/nodice/exandcon.rst b/docs/nodice/exandcon.rst index 8df195e..03cca1c 100644 --- a/docs/nodice/exandcon.rst +++ b/docs/nodice/exandcon.rst @@ -307,5 +307,33 @@ source and destination are swirling around too much and any photons get blurred out. +Addendum +======== + +From wikipedia:: + + According to calculations, the current comoving distance—proper + distance, which takes into account that the universe has expanded + since the light was emitted, to particles from which the cosmic + microwave background radiation (CMBR) was emitted, which + represents the radius of the visible universe, is about 14.0 + billion parsecs (about 45.7 billion light-years), while the + comoving distance to the edge of the observable universe is about + 14.3 billion parsecs (about 46.6 billion light-years),[10] about + 2% larger. + + https://en.wikipedia.org/wiki/Observable_universe#Size + +The author is distinguishing between the current distance to the +objects that emitted the CMBR we see today, noting that due to +continued expansion etc. + +And the distance to the edge of the observable universe. + +The author is looking at things from a big bang perspective and the +assumption that the CMBR is how things were just 380,000 years after +the big bang. + + [1] Another paradigm for the universe. Colin Rourke. aka "The Book of magic." diff --git a/karmapi/cpr.py b/karmapi/cpr.py index 8fce6ac..bf656aa 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -154,7 +154,7 @@ from karmapi import tpot, prime, pigfarm -from blume import magic, mclock2 +from blume import magic, farm from random import random, randint, gauss, shuffle @@ -1206,40 +1206,21 @@ async def run(args): # pass list of balls into NestedWaves spheres = args_to_spheres(args) - farm = magic.Farm() + land = farm.Farm() waves = NestedWaves( balls=spheres, fade=args.fade, twist=args.twist) - farm = magic.Farm() + clock = farm.GuidoClock() + land.add_edge(clock, land.carpet) + land.add_edge(waves, land.carpet) - clock = mclock2.GuidoClock() - carpet = magic.Carpet() - - iq = curio.UniversalQueue() - await carpet.set_incoming(iq) - await carpet.set_outgoing(farm.hatq) - - farm.event_map.update(clock.event_map) - farm.event_map.update(carpet.event_map) - - await waves.set_outgoing(iq) - await clock.set_outgoing(iq) - - waves.incoming = None - clock.incoming = None - - farm.add(carpet, background=True) - farm.add(waves) - farm.add(clock) - - - starter = await curio.spawn(farm.start()) + starter = await curio.spawn(land.start()) print('farm runnnnnnnnnning') - runner = await farm.run() + runner = await land.run() def main(): diff --git a/karmapi/grb.py b/karmapi/grb.py index ba79298..6ff717a 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -117,8 +117,8 @@ from astropy.time import Time import curio - -from karmapi import base, cpr, pigfarm +import blume +from karmapi import base, cpr # Much thanks for all involved in this: @@ -144,14 +144,14 @@ def angle(d, m, s): LIGO_LLON = angle(90, 46, 27.27) -class SolarSystem(cpr.NestedWaves): +class SolarSystem(magic.Ball): def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) + super().__init__() self.sleep = 2 - self.add_event_map('r', self.reverse) + #self.add_event_map('r', self.reverse) async def reverse(self): """ Rongo Rongo change direction """ @@ -165,11 +165,11 @@ def draw(self): print('current ball', ball.name, ball) cv = self.canvas - cv.create_text( - (self.width/2, 50), - text=ball.name + f'\n{dt.fromtimestamp(ball.t)}', - fill='skyblue', - font=pigfarm.BIGLY_FONT) + #cv.create_text( + # (self.width/2, 50), + # text=ball.name + f'\n{dt.fromtimestamp(ball.t)}', + # fill='skyblue', + # font=pigfarm.BIGLY_FONT) for body in self.balls: #body.tick() @@ -285,6 +285,7 @@ def argument_parser(parser=None): parser.add_argument('--grb', default='170817A') parser.add_argument('--gw', help="file for latest ligo data") + parser.add_argument('--galaxy', help="file of local galaxy data") return parser @@ -504,14 +505,16 @@ def main(args): #dump(spheres) - farm = pigfarm.sty(SolarSystem, dict(balls=spheres, fade=args.fade, - twist=args.twist), - play=args.play) + farm = Magic.Farm() + + ss = SolarSystem(balls=spheres, fade=args.fade, + twist=args.twist) - spheres = cpr.args_to_spheres(args) - farm.add(cpr.NestedWaves, dict( - balls=spheres, fade=args.fade, - twist=args.twist)) + farm.add_edge(ss, farm.carpet) + #spheres = cpr.args_to_spheres(args) + #farm.add(cpr.NestedWaves, dict( + # balls=spheres, fade=args.fade, + # twist=args.twist)) curio.run(farm.run, with_monitor=True) @@ -545,13 +548,22 @@ def gravity_waves(path): return rows -def near_galaxies(): +def tokens(line, sep=','): + """ Split line into tokens """ + return [x.strip() for x in line.split(sep)] + +def near_galaxies(infile): """ parse galaxy.txt from https://heasarc.gsfc.nasa.gov/w3browse/all/neargalcat.html """ - pass + header = tokens(infile.readline()) + print(header) + for row in infile: + fields = tokens(row) + yield dict(zip(header, fields)) + if __name__ == '__main__': @@ -560,6 +572,11 @@ def near_galaxies(): args = parser.parse_args() + if args.galaxy: + gals = list(near_galaxies(open(args.galaxy))) + print(gals[0]) + 1/0 + if args.gw: rows = gravity_waves(Path(args.gw)) diff --git a/karmapi/sha.py b/karmapi/sha.py index f75ecb8..49b1c26 100644 --- a/karmapi/sha.py +++ b/karmapi/sha.py @@ -221,14 +221,21 @@ def make_bmatrix(spectra, states): return observations, B -class TeaPlot(tpot.TeaPlot): +class TeaPlot(magic.Ball): - def __init__(self, spectra=[], nstates=10, **kwargs): + def __init__(self, nstates=10, **kwargs): super().__init__(**kwargs) - self.spectra = spectra + + self.tplot = tpot.TeaPlot(**kwargs) + + # Like to change this so input comes over queues + # with an end of queue self.nstates = nstates + self.ins.add('spectra') + self.outs.add('image') + self.event_map = dict( t=self.tea) @@ -274,26 +281,25 @@ async def start(self): # show a plot? plot = gamma_plot(self) - await self.queue.put(plot) + await self.image.put(plot) async def run(self): - while True: - print('TPOT filled, away we go') - print(self.A) - print(self.P0) - self.stew(iters=1, epsilon=2.0) + print('TPOT filled, away we go') + print(self.A) + print(self.P0) + self.stew(iters=1, epsilon=2.0) - plot = gamma_plot(self) - await self.queue.put(plot) + plot = gamma_plot(self) + await self.image.put(plot) - print(f'q size {self.queue.qsize()}') + print(f'q size {self.queue.qsize()}') - #for x in self.GAMMA[:10]: - # print(f'Gamma: {x}') + #for x in self.GAMMA[:10]: + # print(f'Gamma: {x}') - await curio.sleep(1) + await curio.sleep(1) @@ -364,6 +370,44 @@ def rebrew(tplot): tpot.OBSERVATIONS = observations +class Sphere(magic.Ball): + # FIXME: fix so teapot waits on a queue for spectra + # need a queue where None means end of data? + # + # And have it all just working as edges in the farm + + + def __init__(self, **args): + + super().__init__() + + # Now passed in as keywords + self.df = ncdf.CircularField(**dargs) + self.args = args + self.outs.add('image') + self.outs.add('spectra') + + async def run(self): + + args = self.args + self.filter_stamps(hour=args.hour, day=args.day) + + #stamp_stats(df.stamps) + spectra = await generate_spectra(df, self.image, **dargs) + spectra = np.array(spectra) + + print(f'spectra zero shape {spectra[0].shape}') + + # fixme - save spectra somewhere and do faster load. + # cf repeatability too. + # maybe just normalise spectra? + if args.norm: + nspectra = normalise(spectra) + stats(nspectra) + spectra = nspectra + + await self.spectra.put(spectra) + def main(): parser = ncdf.argument_parser() @@ -386,45 +430,31 @@ def main(): async def run(args): - - farm = magic.Farm() + # might be interesting to try to turn args into + # coroutines that allow the values in args to be controlled + # not sure where all that belongs, but should pass args to Farm? + farm = magic.Farm(args) carpet = farm.carpet - await carpet.more() - await carpet.more() + #await carpet.more() + #await carpet.more() farm.setup() await farm.start() runner = await curio.spawn(farm.run()) - # FIXME: fix so teapot waits on a queue for spectra - # need a queue where None means end of data? - # - # And have it all just working as edges in the farm - # magic to go from argparse to a dict dargs = args.__dict__ - # Now passed in as keywords - df = ncdf.CircularField(**dargs) - - df.filter_stamps(hour=args.hour, day=args.day) + sphere = Sphere(**dargs) + + farm.add_node(sphere) - #stamp_stats(df.stamps) - spectra = await generate_spectra(df, carpet.incoming, **dargs) - spectra = np.array(spectra) - print(f'spectra zero shape {spectra[0].shape}') - - # fixme - save spectra somewhere and do faster load. - # cf repeatability too. - # maybe just normalise spectra? - if args.norm: - nspectra = normalise(spectra) - stats(nspectra) - spectra = nspectra + + print(f'spectra zero shape {spectra[0].shape}') # TeaPlotter tea_plotter = TeaPlot(spectra=spectra, From f1655d45ed72d90e69ac32fbb50617eb1c8901a7 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 4 Oct 2019 14:52:45 -0400 Subject: [PATCH 572/642] static universe ramblings --- docs/nodice/exandcon.rst | 7 ++- docs/nodice/static.rst | 103 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 docs/nodice/static.rst diff --git a/docs/nodice/exandcon.rst b/docs/nodice/exandcon.rst index 03cca1c..29ebe04 100644 --- a/docs/nodice/exandcon.rst +++ b/docs/nodice/exandcon.rst @@ -7,7 +7,8 @@ Within this space, time-like geodesics follow two distinct fields: expanding and contracting fields. -[Incorrect at the second sentence]. + +[Incorrect at the second sentence see [2] for follow up.. This is perhaps one of the harder parts of the theory to picture. @@ -334,6 +335,10 @@ The author is looking at things from a big bang perspective and the assumption that the CMBR is how things were just 380,000 years after the big bang. + + [1] Another paradigm for the universe. Colin Rourke. aka "The Book of magic." + +[2] `static.rst` diff --git a/docs/nodice/static.rst b/docs/nodice/static.rst new file mode 100644 index 0000000..a5637a0 --- /dev/null +++ b/docs/nodice/static.rst @@ -0,0 +1,103 @@ +================= + Static Universe +================= + +I began a previous `expanding.rst` by talking about *de Sitter space* +and saying:: + + + Within this space, time-like geodesics follow two distinct fields: + expanding and contracting fields. + + +I received some feedback:: + + + I need to correct one major misunderstanding. You write: "Within + [de Sitter] space, time-like geodesics follow two distinct fields: + expanding and contracting fields." This is not correct. De Sitter + space is highly symmetric. All geodesics are equivalent. The + dichotomy between expanding and contracting that you refer to only + comes into play when you have an observer. Like most of cosmology + these concepts are observer dependent. + +This turned out to be most helpful. + +I was going to edit the `expanding.rst` piece, but correcting things +round here that are not quite right would be a long project. + +So a new piece is in order. + +Outline +======= + +*Perfect Copernican Principle (PCP)*:: + + No particular location should be special. + + This should also be true of time as well as space + +I like to think of this as *space is pretty much the same everywhere*. + +Indeed, as we look into the heavens this does appear to be the case. +Spiral galaxies as far as the eye can see. + +There is a peculiarity with red-shift in our observations. The +further away a galaxy is the redder it looks. + +Galaxies further away are moving faster and faster, the further away +they are? + +How does this square with the PCP? + +Short distances, Minkowski metric is fine. + +Steer clear of black holes. + + +In [1] Colin Rourke shows that this is exactly what happens in *de +Sitter space*. + + + +This piece takes things just a little further. + + + + +Static Universe + +Expansion as an illusion + +de Sitter Space + +Gamma Ray Burst + +Cosmic Microwave Background Radiation + +Arriving and departing + +========================================= + +Observations would seem to show that our visible universe is saturated +with galaxies. + +Each galaxy centred on a giant, super massive centre. + +Our observations of this universe show this curious red shift, the +further away a light source is the greater the red shift. + +Surely, this is just what we should expect, due to the inertial drag +caused by the intervening galaxies? + +Each black hole, twisting and slowing time, giving the illusion of an +expanding universe. + +Curious behaviour at the Hubble distance. + +New arrivals and old friends. + +Harmonics +========= + +Magnetism and the speed of a stream of electrons? From b5804fabca433aad1959dbafa1001479a2a108ee Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 4 Oct 2019 17:16:16 -0400 Subject: [PATCH 573/642] galaxies not looking right but plotting --- karmapi/base.py | 3 +- karmapi/cpr.py | 2 +- karmapi/grb.py | 195 ++++++++++++++++++++++++++++++----------------- karmapi/prime.py | 8 +- 4 files changed, 133 insertions(+), 75 deletions(-) diff --git a/karmapi/base.py b/karmapi/base.py index f7b1b4d..f73dc1c 100644 --- a/karmapi/base.py +++ b/karmapi/base.py @@ -20,7 +20,8 @@ try: import pandas fft = pandas.np.fft -except: +except Exception as e: + print(e) print('NO PANDAS') from karmapi import flash diff --git a/karmapi/cpr.py b/karmapi/cpr.py index bf656aa..b7cffe9 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -152,7 +152,7 @@ from PIL import Image, ImageTk -from karmapi import tpot, prime, pigfarm +from karmapi import tpot, prime from blume import magic, farm diff --git a/karmapi/grb.py b/karmapi/grb.py index 6ff717a..f8024af 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -110,6 +110,7 @@ import requests import json from pathlib import Path +import datetime from datetime import datetime as dt @@ -117,8 +118,13 @@ from astropy.time import Time import curio + +from matplotlib import pyplot as plt + import blume -from karmapi import base, cpr +from blume import magic, farm + +from karmapi import cpr # Much thanks for all involved in this: @@ -146,10 +152,11 @@ def angle(d, m, s): class SolarSystem(magic.Ball): - def __init__(self, *args, **kwargs): + def __init__(self, balls, *args, **kwargs): super().__init__() self.sleep = 2 + self.balls = balls #self.add_event_map('r', self.reverse) @@ -159,61 +166,37 @@ async def reverse(self): for ball in self.balls: ball.inc *= -1 - def draw(self): + async def run(self): """ Draw the balls """ - ball = self.balls[self.dball] - print('current ball', ball.name, ball) - - cv = self.canvas - #cv.create_text( - # (self.width/2, 50), - # text=ball.name + f'\n{dt.fromtimestamp(ball.t)}', - # fill='skyblue', - # font=pigfarm.BIGLY_FONT) - - for body in self.balls: - #body.tick() - - #if body is ball: - # continue - name = body.name - wheret = body.body.transform_to(ball.body) - where = body.body - #print(name, where) - print(name.upper(), where.ra, where.dec) - print(name, - where.ra - body.body.ra, - where.dec - body.body.dec) - - xx, yy = self.draw_ball(where.dec.value, where.ra.value) - cv.create_text( - (xx - 30, yy + 20), - text=name, fill='cyan') + #ball = self.balls[self.dball] + #print('current ball', ball.name, ball) - - xx, yy = self.draw_ball( - wheret.dec.value, wheret.ra.value, - fill='red') - cv.create_text( - (xx - 30, yy + 20), - text=name, fill='magenta') + fig = plt.figure() - - print() + locs = [self.decra2rad( + ball.body.dec.value, + ball.body.ra.value) for ball in self.balls] - def draw_ball(self, dec, ra, fill='yellow', size=10, - xx=None, yy=None, **kwargs): - """ Draw a filled circle at place """ + print(locs[:10]) - xx, yy = self.latlon2xy(dec, ra) - print(f'drawing oval {ra} {dec} at {xx} {yy} {self.width} {self.height}') - self.canvas.create_oval( - xx-size, - yy-size, - xx+size, yy+size, fill=fill) + fig.clear() + + #ax = fig.add_axes((0,0,1,1), projection='mollweide') + ax = fig.add_subplot(1, 1, 1, + projection='mollweide') - return xx, yy + ax.set_title('galaxy', color='white') + ax.scatter([xx[0] for xx in locs], [xx[1] for xx in locs], color='r') + #ax.axis('off') + + await self.outgoing.put(magic.fig2data(fig)) + + + def decra2rad(self, dec, ra): + + return dec * math.pi / 180, ra * math.pi / 180 + def latlon2xy(self, lat, lon): """ Convert lat lon to yard coordinates """ @@ -391,29 +374,24 @@ def body_data(name, t): body=bod) -class Body(cpr.Sphere): +class Body(magic.Ball): def __init__(self, name, t, size=None): """ Initialise the body """ + super().__init__() + self.name = name bd = body_data(name, t) self.body = bd['body'] self.inc = 3600 * 6 - super().__init__(size=size, t=t.timestamp(), m=bd['m'], r=bd['r']) def tick(self): self.t += self.inc return self - def update(self, ball): - - super().update(ball) - - self.body = get_body(self.name, dt.fromtimestamp(self.t)) - def separation(self, body): """ Return distance to body """ return self.body.separation_3d(body) @@ -484,11 +462,31 @@ def get_waves(path=None): return data -def main(args): + +def parse_date(date): + """ Parse a date """ + if date is None: + return date + + fields = [int(x.strip()) for x in date.split('/')] + + + while len(fields) < 3: + fields.append(1) + + while len(fields) < 6: + fields.append(0) + + year, month, day, hour, minute, second = fields + + return datetime.datetime(year, month, day, hour, minute, second) + + +async def run(args): print(args.date) - args.date = base.parse_date(args.date) + args.date = parse_date(args.date) t = args.date @@ -500,24 +498,51 @@ def main(args): print(f'{k}: {v["moverr"]}') + # pass list of balls into NestedWaves spheres = args_to_spheres(args, t) - #dump(spheres) - - farm = Magic.Farm() + print("GOT spheres", len(spheres)) + + if args.galaxy: + gals = list(near_galaxies(open(args.galaxy))) + + gals = [cleanse(gal) for gal in gals] + + print('clean galaxy data') + print(gals[0]) + + for gal in gals: + gbod = Body('sun', t=t) + ra = gal['ra'] + dec = gal['dec'] + + gbod.body = coordinates.SkyCoord(ra, dec, unit='deg') + + gbod.name = gal['name'] + + spheres.append(gbod) + + print("GOT spheres", len(spheres)) + + the_farm = farm.Farm() ss = SolarSystem(balls=spheres, fade=args.fade, twist=args.twist) - farm.add_edge(ss, farm.carpet) + the_farm.add_edge(ss, the_farm.carpet) + the_farm.add_edge(farm.GuidoClock(), the_farm.carpet) #spheres = cpr.args_to_spheres(args) #farm.add(cpr.NestedWaves, dict( # balls=spheres, fade=args.fade, # twist=args.twist)) + the_farm.setup() + starter = await curio.spawn(the_farm.start()) - curio.run(farm.run, with_monitor=True) + print('farm runnnnnnnnnning') + runner = await the_farm.run() + def gravity_waves(path): """ Read or download gravity wave observations """ @@ -565,6 +590,38 @@ def near_galaxies(infile): yield dict(zip(header, fields)) +def parse_radec(value): + + d, m, s = [float(s) for s in value.split()] + + scale = 1 + if d < 0: + d *= -1 + scale = -1 + + d += m / 60. + d += s / 3600. + + return d + +def cleanse(data): + + clean = {} + + for key, value in data.items(): + + try: + value = float(value) + except: + pass + + if key in ('ra', 'dec'): + value = parse_radec(value) + + clean[key] = value + + return clean + if __name__ == '__main__': @@ -572,10 +629,7 @@ def near_galaxies(infile): args = parser.parse_args() - if args.galaxy: - gals = list(near_galaxies(open(args.galaxy))) - print(gals[0]) - 1/0 + if args.gw: rows = gravity_waves(Path(args.gw)) @@ -585,5 +639,6 @@ def near_galaxies(infile): df = pandas.DataFrame(rows) print(df.describe()) else: - main(args) + + curio.run(run(args)) diff --git a/karmapi/prime.py b/karmapi/prime.py index 6a97e5b..498bfe3 100644 --- a/karmapi/prime.py +++ b/karmapi/prime.py @@ -3,7 +3,7 @@ import random import math -from karmapi.piglet import Video +from blume import magic xx = """ 10 0.500000 0.4343 A @@ -26,7 +26,7 @@ 1,000,000,000,000,000,000 1.000000 0.0241 C """ -class Prime(Video): +class Prime(magic.Ball): def compute_data(self): @@ -34,7 +34,7 @@ def compute_data(self): pass - def plot(self): + async def run(self): print('plotting primes') @@ -58,6 +58,8 @@ def plot(self): self.axes.plot(y) + self.put(magic.fig2data(plt)) + PRIMES = [2, 3] From 0e3abefd545da19effa3e1ce45548dda5a9fabc0 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 4 Oct 2019 17:30:57 -0400 Subject: [PATCH 574/642] need to work on sha too --- karmapi/sha.py | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/karmapi/sha.py b/karmapi/sha.py index 49b1c26..2ad2b72 100644 --- a/karmapi/sha.py +++ b/karmapi/sha.py @@ -15,6 +15,7 @@ from matplotlib import pyplot as plt from blume.table import table from blume import magic +from blume import farm as magic_farm import numpy as np @@ -233,9 +234,6 @@ def __init__(self, nstates=10, **kwargs): # with an end of queue self.nstates = nstates - self.ins.add('spectra') - self.outs.add('image') - self.event_map = dict( t=self.tea) @@ -281,7 +279,7 @@ async def start(self): # show a plot? plot = gamma_plot(self) - await self.image.put(plot) + await self.put(plot, 'image') async def run(self): @@ -292,7 +290,7 @@ async def run(self): self.stew(iters=1, epsilon=2.0) plot = gamma_plot(self) - await self.image.put(plot) + await self.put(plot, 'image') print(f'q size {self.queue.qsize()}') @@ -382,10 +380,8 @@ def __init__(self, **args): super().__init__() # Now passed in as keywords - self.df = ncdf.CircularField(**dargs) + self.df = ncdf.CircularField(**args) self.args = args - self.outs.add('image') - self.outs.add('spectra') async def run(self): @@ -406,7 +402,7 @@ async def run(self): stats(nspectra) spectra = nspectra - await self.spectra.put(spectra) + await self.put(spectra, 'spectra') def main(): @@ -433,7 +429,7 @@ async def run(args): # might be interesting to try to turn args into # coroutines that allow the values in args to be controlled # not sure where all that belongs, but should pass args to Farm? - farm = magic.Farm(args) + farm = magic_farm.Farm() carpet = farm.carpet #await carpet.more() @@ -451,10 +447,6 @@ async def run(args): farm.add_node(sphere) - - - - print(f'spectra zero shape {spectra[0].shape}') # TeaPlotter tea_plotter = TeaPlot(spectra=spectra, From dadf912f051f4c78e7121f54251805e570105b64 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 5 Oct 2019 11:01:14 -0400 Subject: [PATCH 575/642] trying to make sense of near galaxy data --- karmapi/grb.py | 49 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/karmapi/grb.py b/karmapi/grb.py index f8024af..8c158d2 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -175,7 +175,7 @@ async def run(self): locs = [self.decra2rad( ball.body.dec.value, - ball.body.ra.value) for ball in self.balls] + ball.body.ra.value) for ball in self.balls[12:]] print(locs[:10]) @@ -187,11 +187,33 @@ async def run(self): ax.set_title('galaxy', color='white') - ax.scatter([xx[0] for xx in locs], [xx[1] for xx in locs], color='r') + ax.scatter([xx[1] for xx in locs], [xx[0] for xx in locs], + c=[x.distance for x in self.balls[12:]]) #ax.axis('off') await self.outgoing.put(magic.fig2data(fig)) + fig.clear() + + ax = fig.add_subplot(111) + rv = [xx.data['radial_velocity'] or 0.0 for xx in self.balls[12:]] + + ax.scatter(rv, + [xx.data['distance'] for xx in self.balls[12:]]) + + await curio.sleep(self.sleep) + await self.outgoing.put(magic.fig2data(fig)) + + #await self.outgoing.put(magic.fig2data(fig)) + ax = fig.add_subplot(111) + ax.plot([xx[0] for xx in locs]) + #await self.outgoing.put(magic.fig2data(fig)) + + fig.clear() + ax = fig.add_subplot(111) + ax.plot([xx[1] for xx in locs]) + #await self.outgoing.put(magic.fig2data(fig)) + def decra2rad(self, dec, ra): @@ -321,7 +343,7 @@ def au2earth(value=1): # earth to sun e2s = float(constants.c.to('km/s').value) * 499.0 - print(e2s) + #print(e2s) return value * e2s / 6378 @@ -358,9 +380,10 @@ def get_distance(): pass def body_data(name, t): - + bod = get_body(name, t) mass = get_mass(name) + radius = None if name == 'earth': radius = 6378 / 1.5e8 @@ -379,10 +402,13 @@ class Body(magic.Ball): def __init__(self, name, t, size=None): """ Initialise the body """ + super().__init__() self.name = name + bd = body_data(name, t) + self.body = bd['body'] self.inc = 3600 * 6 @@ -482,6 +508,11 @@ def parse_date(date): return datetime.datetime(year, month, day, hour, minute, second) +class Bod(object): + + def __init__(self, ra, dec): + self.body = coordinates.SkyCoord(ra, dec, unit='deg') + async def run(args): @@ -513,11 +544,13 @@ async def run(args): print(gals[0]) for gal in gals: - gbod = Body('sun', t=t) + #gbod = Body('sun', t=t) ra = gal['ra'] dec = gal['dec'] - - gbod.body = coordinates.SkyCoord(ra, dec, unit='deg') + gbod = Bod(ra, dec) + gbod.distance = gal['distance'] + gbod.data = gal + #gbod.body = coordinates.SkyCoord(ra, dec, unit='deg') gbod.name = gal['name'] @@ -602,7 +635,7 @@ def parse_radec(value): d += m / 60. d += s / 3600. - return d + return d * scale def cleanse(data): From c05b8f5a58871240fc59eab8458ab1e262979fb3 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 5 Oct 2019 14:36:55 -0400 Subject: [PATCH 576/642] grb galaxy plotting limping along --- karmapi/grb.py | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/karmapi/grb.py b/karmapi/grb.py index 8c158d2..60e116b 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -175,7 +175,7 @@ async def run(self): locs = [self.decra2rad( ball.body.dec.value, - ball.body.ra.value) for ball in self.balls[12:]] + ball.body.ra.value) for ball in self.balls] print(locs[:10]) @@ -188,25 +188,39 @@ async def run(self): ax.set_title('galaxy', color='white') ax.scatter([xx[1] for xx in locs], [xx[0] for xx in locs], - c=[x.distance for x in self.balls[12:]]) - #ax.axis('off') + c=[x.distance for x in self.balls]) + ax.axis('off') - await self.outgoing.put(magic.fig2data(fig)) + await self.outgoing.put(magic.fig2data(plt)) fig.clear() ax = fig.add_subplot(111) - rv = [xx.data['radial_velocity'] or 0.0 for xx in self.balls[12:]] + rv = [xx.data.get('radial_velocity', 0.0) or 0. for xx in self.balls] + distance = [xx.data.get('distance', 0.0) or 0. for xx in self.balls] + + rrv = [] + dd = [] + for vel, dist in zip(rv, distance): + if dist > 12: + continue + + if vel == 0.0: + # use Hubble relationship + vel = dist * 70. + rrv.append(vel) + dd.append(dist) - ax.scatter(rv, - [xx.data['distance'] for xx in self.balls[12:]]) + ax.scatter(dd, rrv) - await curio.sleep(self.sleep) - await self.outgoing.put(magic.fig2data(fig)) + #await curio.sleep(self.sleep) + #await self.outgoing.put(magic.fig2data(fig)) + #await curio.sleep(self.sleep) #await self.outgoing.put(magic.fig2data(fig)) + fig.clear() ax = fig.add_subplot(111) - ax.plot([xx[0] for xx in locs]) + ax.plot(distance) #await self.outgoing.put(magic.fig2data(fig)) fig.clear() @@ -217,7 +231,7 @@ async def run(self): def decra2rad(self, dec, ra): - return dec * math.pi / 180, ra * math.pi / 180 + return dec * math.pi / 180, (ra - 12) * math.pi / 12. def latlon2xy(self, lat, lon): @@ -411,6 +425,7 @@ def __init__(self, name, t, size=None): self.body = bd['body'] self.inc = 3600 * 6 + self.data = bd def tick(self): @@ -427,7 +442,9 @@ def args_to_spheres(args, t): spheres = [] for body in BODIES: - spheres.append(Body(body, t=t)) + bod = Body(body, t=t) + bod.distance = 0 + spheres.append(bod) grb = {} grb['170817A'] = (176.8, -39.8) # RA DEC @@ -437,6 +454,7 @@ def args_to_spheres(args, t): gbod = Body('sun', t=t) gbod.body = coordinates.SkyCoord(ra, dec, unit='deg') + gbod.distance = 0.0 gbod.name = args.grb spheres.append(gbod) From 6f6cc01b57dbe197998bc530d0d4acfb23f666c7 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 5 Oct 2019 15:27:09 -0400 Subject: [PATCH 577/642] grb showing planets in red --- karmapi/grb.py | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/karmapi/grb.py b/karmapi/grb.py index 60e116b..e4941dc 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -150,13 +150,14 @@ def angle(d, m, s): LIGO_LLON = angle(90, 46, 27.27) -class SolarSystem(magic.Ball): +class SkyMap(magic.Ball): - def __init__(self, balls, *args, **kwargs): + def __init__(self, balls, planets, *args, **kwargs): super().__init__() self.sleep = 2 self.balls = balls + self.planets = planets #self.add_event_map('r', self.reverse) @@ -186,9 +187,19 @@ async def run(self): projection='mollweide') ax.set_title('galaxy', color='white') + for planet in self.planets: + print(planet.body) + print([x.body.ra for x in self.planets]) ax.scatter([xx[1] for xx in locs], [xx[0] for xx in locs], c=[x.distance for x in self.balls]) + + ax.scatter([x.body.ra.radian - math.pi for x in self.planets], + [x.body.dec.radian for x in self.planets], color='r') + + for pp in self.planets: + ax.text(pp.body.ra.radian - math.pi, pp.body.dec.radian + math.pi/10, + pp.name, color='yellow') ax.axis('off') await self.outgoing.put(magic.fig2data(plt)) @@ -210,10 +221,10 @@ async def run(self): vel = dist * 70. rrv.append(vel) dd.append(dist) - + ax.scatter(dd, rrv) - #await curio.sleep(self.sleep) + await curio.sleep(self.sleep) #await self.outgoing.put(magic.fig2data(fig)) #await curio.sleep(self.sleep) @@ -549,10 +560,11 @@ async def run(args): # pass list of balls into NestedWaves - spheres = args_to_spheres(args, t) + planets = args_to_spheres(args, t) - print("GOT spheres", len(spheres)) + print("GOT solar system", len(planets)) + spheres = [] if args.galaxy: gals = list(near_galaxies(open(args.galaxy))) @@ -578,8 +590,8 @@ async def run(args): the_farm = farm.Farm() - ss = SolarSystem(balls=spheres, fade=args.fade, - twist=args.twist) + ss = SkyMap(balls=spheres, planets=planets, fade=args.fade, + twist=args.twist) the_farm.add_edge(ss, the_farm.carpet) the_farm.add_edge(farm.GuidoClock(), the_farm.carpet) From 5e828397641e70f4f7b2cf878d257bdc6cbc5ad1 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 5 Oct 2019 15:56:38 -0400 Subject: [PATCH 578/642] make planets move in grb --- karmapi/grb.py | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/karmapi/grb.py b/karmapi/grb.py index e4941dc..4e29ea7 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -110,9 +110,9 @@ import requests import json from pathlib import Path -import datetime from datetime import datetime as dt +from datetime import timedelta from astropy import coordinates, constants from astropy.time import Time @@ -155,7 +155,7 @@ class SkyMap(magic.Ball): def __init__(self, balls, planets, *args, **kwargs): super().__init__() - self.sleep = 2 + self.sleep = 1 self.balls = balls self.planets = planets @@ -186,8 +186,9 @@ async def run(self): ax = fig.add_subplot(1, 1, 1, projection='mollweide') - ax.set_title('galaxy', color='white') + ax.set_title(str(self.planets[0].t), color='white') for planet in self.planets: + planet.tick() print(planet.body) print([x.body.ra for x in self.planets]) @@ -224,7 +225,7 @@ async def run(self): ax.scatter(dd, rrv) - await curio.sleep(self.sleep) + #await curio.sleep(self.sleep) #await self.outgoing.put(magic.fig2data(fig)) #await curio.sleep(self.sleep) @@ -358,7 +359,7 @@ def get_mass(body): 'earth', 'mars', 'jupiter', 'saturn', 'neptune', 'uranus'] -BODIES = coordinates.solar_system_ephemeris.bodies +#BODIES = coordinates.solar_system_ephemeris.bodies RADIUS_OF_EARTH = 6378. RADIUS_OF_SUN = 1.391e6 @@ -431,18 +432,25 @@ def __init__(self, name, t, size=None): super().__init__() self.name = name + self.t = t + self.inc = 3600 * 6 - bd = body_data(name, t) + self.set_body() + def set_body(self): + + bd = body_data(self.name, self.t) self.body = bd['body'] - self.inc = 3600 * 6 self.data = bd - def tick(self): - self.t += self.inc - return self + self.t += timedelta(seconds=self.inc) + return self.set_body() + + async def run(self): + + self.tick() def separation(self, body): """ Return distance to body """ @@ -534,7 +542,7 @@ def parse_date(date): year, month, day, hour, minute, second = fields - return datetime.datetime(year, month, day, hour, minute, second) + return dt(year, month, day, hour, minute, second) class Bod(object): From 297980cae84ae8e8718f6815059c51a8f4c8eb19 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 5 Oct 2019 16:34:45 -0400 Subject: [PATCH 579/642] add rotation to galaxy plot --- karmapi/grb.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/karmapi/grb.py b/karmapi/grb.py index 4e29ea7..165daa0 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -158,6 +158,7 @@ def __init__(self, balls, planets, *args, **kwargs): self.sleep = 1 self.balls = balls self.planets = planets + self.offset = 0 #self.add_event_map('r', self.reverse) @@ -176,7 +177,8 @@ async def run(self): locs = [self.decra2rad( ball.body.dec.value, - ball.body.ra.value) for ball in self.balls] + ball.body.ra.value, rotate=self.offset) for ball in self.balls] + self.offset += math.pi / 10 print(locs[:10]) @@ -192,8 +194,10 @@ async def run(self): print(planet.body) print([x.body.ra for x in self.planets]) + ax.scatter([xx[1] for xx in locs], [xx[0] for xx in locs], - c=[x.distance for x in self.balls]) + c=[x.distance for x in self.balls], + s=[x.data['major_axis'] or 1 for x in self.balls]) ax.scatter([x.body.ra.radian - math.pi for x in self.planets], [x.body.dec.radian for x in self.planets], color='r') @@ -241,9 +245,14 @@ async def run(self): #await self.outgoing.put(magic.fig2data(fig)) - def decra2rad(self, dec, ra): + def decra2rad(self, dec, ra, rotate=0): - return dec * math.pi / 180, (ra - 12) * math.pi / 12. + ra = (ra - 12) * math.pi / 12. + ra += rotate + while ra > math.pi: + ra -= 2 * math.pi + + return dec * math.pi / 180., ra def latlon2xy(self, lat, lon): From dfdd96d315a45995d8e93d18309ba58e02fd5342 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 6 Oct 2019 14:51:36 -0400 Subject: [PATCH 580/642] grb galactic visualisation coming along --- karmapi/grb.py | 86 +++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 67 insertions(+), 19 deletions(-) diff --git a/karmapi/grb.py b/karmapi/grb.py index 165daa0..a5c1f3f 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -177,34 +177,68 @@ async def run(self): locs = [self.decra2rad( ball.body.dec.value, - ball.body.ra.value, rotate=self.offset) for ball in self.balls] - self.offset += math.pi / 10 - - print(locs[:10]) - + ball.body.ra.value) + for ball in self.balls] + fig.clear() #ax = fig.add_axes((0,0,1,1), projection='mollweide') ax = fig.add_subplot(1, 1, 1, projection='mollweide') - ax.set_title(str(self.planets[0].t), color='white') + if self.planets: + ax.set_title(str(self.planets[0].t), color='white') + + sun = None for planet in self.planets: planet.tick() - print(planet.body) + if planet.name == 'sun': + sun = planet - print([x.body.ra for x in self.planets]) + if sun: + self.offset = (sun.body.ra.rad - math.pi) * -1 + print("WITH SUN", self.offset / math.pi) - ax.scatter([xx[1] for xx in locs], [xx[0] for xx in locs], + + + ax.scatter([self.spinra(xx[1]) for xx in locs], + [xx[0] for xx in locs], c=[x.distance for x in self.balls], s=[x.data['major_axis'] or 1 for x in self.balls]) - ax.scatter([x.body.ra.radian - math.pi for x in self.planets], - [x.body.dec.radian for x in self.planets], color='r') - - for pp in self.planets: - ax.text(pp.body.ra.radian - math.pi, pp.body.dec.radian + math.pi/10, - pp.name, color='yellow') + #self.planets = [] + planet_xx = [x.body.ra.radian - math.pi for x in self.planets] + #planet_xx = [self.spinra(x) for x in planet_xx] + + planet_colors = dict( + sun='gold', + mercury='silver', + venus='orange', + moon='lightblue', + mars='crimson', + jupiter='brick', + saturn='saphire', + neptune='green', + uranus='indigo', + pluto='violet') + + pcs = [math.log(x.body.distance.au + 1) for x in self.planets] + planet_sizes = [min(p.data['m'], 1000.0) for p in self.planets] + print(planet_sizes) + + cc = ax.scatter(planet_xx, + [x.body.dec.radian for x in self.planets], + c=pcs, + s=planet_sizes, + cmap='rainbow') + + if False: + for pp in self.planets: + ax.text(pp.body.ra.radian - math.pi, + pp.body.dec.radian + math.pi/10, + pp.name, color='yellow') + + #plt.colorbar(cc) ax.axis('off') await self.outgoing.put(magic.fig2data(plt)) @@ -218,7 +252,7 @@ async def run(self): rrv = [] dd = [] for vel, dist in zip(rv, distance): - if dist > 12: + if dist > 11: continue if vel == 0.0: @@ -245,10 +279,21 @@ async def run(self): #await self.outgoing.put(magic.fig2data(fig)) - def decra2rad(self, dec, ra, rotate=0): + def spinra(self, ra): + + ra += self.offset + while ra > math.pi: + ra -= 2 * math.pi + + while ra < math.pi * -1: + ra += 2 * math.pi + + return ra + + def decra2rad(self, dec, ra): ra = (ra - 12) * math.pi / 12. - ra += rotate + while ra > math.pi: ra -= 2 * math.pi @@ -442,7 +487,10 @@ def __init__(self, name, t, size=None): self.name = name self.t = t - self.inc = 3600 * 6 + + self.inc = 3600 * 6 # 6 hours + self.inc = 3600 * 24 * 28 # 1 month + self.inc = 3600 * 24 * 7 # 1 week self.set_body() From ebe1b8b1729833c711b5414aaec982a595824225 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 6 Oct 2019 19:09:59 -0400 Subject: [PATCH 581/642] constellation names in grb --- karmapi/grb.py | 59 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 49 insertions(+), 10 deletions(-) diff --git a/karmapi/grb.py b/karmapi/grb.py index a5c1f3f..2840bf1 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -120,6 +120,7 @@ import curio from matplotlib import pyplot as plt +from matplotlib import colors import blume from blume import magic, farm @@ -175,11 +176,6 @@ async def run(self): fig = plt.figure() - locs = [self.decra2rad( - ball.body.dec.value, - ball.body.ra.value) - for ball in self.balls] - fig.clear() #ax = fig.add_axes((0,0,1,1), projection='mollweide') @@ -189,6 +185,11 @@ async def run(self): if self.planets: ax.set_title(str(self.planets[0].t), color='white') + locs = [self.decra2rad( + ball.body.dec.value, + ball.body.ra.value) + for ball in self.balls] + sun = None for planet in self.planets: planet.tick() @@ -201,23 +202,41 @@ async def run(self): + ball_colours = [x.distance for x in self.balls] + ax.scatter([self.spinra(xx[1]) for xx in locs], [xx[0] for xx in locs], - c=[x.distance for x in self.balls], + c=ball_colours, s=[x.data['major_axis'] or 1 for x in self.balls]) + norm = colors.Normalize(min(ball_colours), max(ball_colours)) + cm = plt.get_cmap() + for ball, loc, colour in zip(self.balls, locs, ball_colours): + ma = ball.data['major_axis'] + if (ma or 1) > 5: + constellation = coordinates.get_constellation(ball.body) + + print() + print(constellation) + print(ball) + ax.text(self.spinra(loc[1]), loc[0], constellation, + color=cm(1.0-norm(colour)), fontsize=10 * math.log(max(ma, 10)) / 10) + + #self.planets = [] planet_xx = [x.body.ra.radian - math.pi for x in self.planets] + planet_yy = [x.body.dec.radian for x in self.planets] #planet_xx = [self.spinra(x) for x in planet_xx] planet_colors = dict( - sun='gold', + earth='gold', + sun='brown', mercury='silver', venus='orange', moon='lightblue', mars='crimson', - jupiter='brick', - saturn='saphire', + jupiter='grey', + saturn='skyblue', neptune='green', uranus='indigo', pluto='violet') @@ -225,13 +244,33 @@ async def run(self): pcs = [math.log(x.body.distance.au + 1) for x in self.planets] planet_sizes = [min(p.data['m'], 1000.0) for p in self.planets] print(planet_sizes) + + pcs = [planet_colors[p.name] for p in self.planets] + #pcs = [planet_colors['saturn'] for p in self.planets] + #pcs = ['brick'] * len(pcs) + cc = ax.scatter(planet_xx, - [x.body.dec.radian for x in self.planets], + planet_yy, c=pcs, s=planet_sizes, cmap='rainbow') + for ball, loc, colour in zip(self.planets, + zip(planet_xx, planet_yy), + pcs): + + try: + constellation = coordinates.get_constellation(ball.body) + except: + print('no constellation for', ball) + + print() + print(constellation) + print(ball) + ax.text(loc[0], loc[1], constellation + ball.name, + color=colour, fontsize=12) + if False: for pp in self.planets: ax.text(pp.body.ra.radian - math.pi, From ec7ffb87aff0f07bff1b05a21421d1ed56c0b036 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 9 Oct 2019 16:04:58 -0400 Subject: [PATCH 582/642] universal galactic confusion extends to grb.py --- docs/nodice/exandcon.rst | 14 +++++---- docs/nodice/static.rst | 61 +++++++++++++++++++++++++++++++--------- karmapi/grb.py | 17 ++++++----- 3 files changed, 66 insertions(+), 26 deletions(-) diff --git a/docs/nodice/exandcon.rst b/docs/nodice/exandcon.rst index 29ebe04..8688cfd 100644 --- a/docs/nodice/exandcon.rst +++ b/docs/nodice/exandcon.rst @@ -13,7 +13,7 @@ expanding and contracting fields. This is perhaps one of the harder parts of the theory to picture. Satelite loops of water vapour in the earth's atmosphere may help with -this +this. This site has excellent animations: @@ -43,22 +43,22 @@ they clear space, allowing light to pass. Now the progess of that light is modulated by the intervening matter, the vast majority of which lies at the centre of, or close to, a galaxy. -So what of the increasing red shift as we get deeper into the galaxy, +So what of the increasing red shift as we get deeper into the universe, does that not mean that those galaxies are receding faster? Is not that just how space time works, when you saturate it with giant rotating masses? -Remember the galaxy is saturated, in fact appears to be in an almost +Remember the universe is saturated, in fact appears to be in an almost perfect equilibrium, like clouds of water vapour in our atmosphere. Surely it is just the case, the further light travels the more it is red shifted by the intervening matter? An inertial drag that matter -has on space time. +has on space time? Now how does this all square with gamma ray bursts? -The distortion of space time that giant masses create is move complex +The distortion of space time that giant masses create is more complex than described above, it contains both expansive and contractive fields. @@ -68,7 +68,9 @@ nodes of the lattice evenly spaced. Pick a point and apply a twist to the lattice. This distorts the lattice near the twisting point, lattice cubes become lozenge shaped. -Overall, the contractions and expansions of the lattice balance out. +Overall, the contractions and expansions of the lattice balance out, +or rather they serve to provide an overall expansion in space, a world +within worlds. Now photons following the contractive field will tend to bunch up, in effect they are blue shifted. When we observe the result of this, diff --git a/docs/nodice/static.rst b/docs/nodice/static.rst index a5637a0..616dafe 100644 --- a/docs/nodice/static.rst +++ b/docs/nodice/static.rst @@ -21,7 +21,9 @@ I received some feedback:: comes into play when you have an observer. Like most of cosmology these concepts are observer dependent. -This turned out to be most helpful. +This turned out to be most helpful. A few weeks have passed and a lot +of thought on how to simplify things, very much helped by a better +understanding of what I think we may be seeing. I was going to edit the `expanding.rst` piece, but correcting things round here that are not quite right would be a long project. @@ -46,36 +48,47 @@ There is a peculiarity with red-shift in our observations. The further away a galaxy is the redder it looks. Galaxies further away are moving faster and faster, the further away -they are? +they are, the faster they are receding is conventional wisdom. How does this square with the PCP? -Short distances, Minkowski metric is fine. - -Steer clear of black holes. - - -In [1] Colin Rourke shows that this is exactly what happens in *de -Sitter space*. - +In short it does not. +Short distances, Minkowski metric is fine. -This piece takes things just a little further. +Indeed, most of the time relative velocities are a small fraction (< +0.01) of the speed of light and simple cartesian geometry suffices. +Over longer distances redshift accumulates, and since this is (largely?) +indistinguishable from the case that more distant sources are receding +faster and the intervening space is not changing anything, there comes +a distance when the Minkowski metric starts to make a difference. +The Minkowski metric starts to become important in calculations, since +the aparent relative velocity is approaching a significant proportion +of the speed of light. Static Universe +=============== Expansion as an illusion - -de Sitter Space +======================== Gamma Ray Burst +=============== + + +de Sitter Space +=============== Cosmic Microwave Background Radiation +===================================== Arriving and departing +====================== + + ========================================= @@ -101,3 +114,25 @@ Harmonics ========= Magnetism and the speed of a stream of electrons? + + +Plan +==== + +Hubble constant. Allows calibration of inertial drag. + +Observations in nearby galaxies alone should be plenty to get a +reasonable value. + +This may help in understanding why galaxies travel and rotate at the +speeds they do. + +I suspect fully resolving this would involve some understanding of +galactic tidal effects and harmonics. + +I also suspect that magnetism, protons and electrons may play a role. + + +[1] Another paradigm for the universe. Colin Rourke. aka "The Book +of magic." + diff --git a/karmapi/grb.py b/karmapi/grb.py index 2840bf1..ae43393 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -213,7 +213,7 @@ async def run(self): cm = plt.get_cmap() for ball, loc, colour in zip(self.balls, locs, ball_colours): ma = ball.data['major_axis'] - if (ma or 1) > 5: + if (ma or 1) > 20: constellation = coordinates.get_constellation(ball.body) print() @@ -242,7 +242,8 @@ async def run(self): pluto='violet') pcs = [math.log(x.body.distance.au + 1) for x in self.planets] - planet_sizes = [min(p.data['m'], 1000.0) for p in self.planets] + planet_sizes = [math.log(min(p.data['m'], 1000.0) + 1) + for p in self.planets] print(planet_sizes) pcs = [planet_colors[p.name] for p in self.planets] @@ -268,8 +269,8 @@ async def run(self): print() print(constellation) print(ball) - ax.text(loc[0], loc[1], constellation + ball.name, - color=colour, fontsize=12) + ax.text(loc[0], loc[1], constellation + '\n' + ball.name, + color=colour, fontsize=8) if False: for pp in self.planets: @@ -405,9 +406,11 @@ def argument_parser(parser=None): #parser.add_argument('--date', default='2015/09/14/09/50/45') #parser.add_argument('--date', default='2017/08/14') - parser.add_argument('--date', default='2017/08/17') + parser.add_argument('--date') - parser.add_argument('--grb', default='170817A') + #parser.add_argument('--grb', default='170817A') + parser.add_argument('--grb', + help="fixme get gamma ray burst data") parser.add_argument('--gw', help="file for latest ligo data") parser.add_argument('--galaxy', help="file of local galaxy data") @@ -625,7 +628,7 @@ def get_waves(path=None): def parse_date(date): """ Parse a date """ if date is None: - return date + return dt.now() fields = [int(x.strip()) for x in date.split('/')] From 58e6bf0332abaef22f65e6e84a472ceaed537558 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 10 Oct 2019 19:09:30 -0400 Subject: [PATCH 583/642] static moving along grb chopping about --- docs/nodice/static.rst | 183 +++++++++++++++++++++++++++++++++++++---- karmapi/grb.py | 32 ++++--- 2 files changed, 190 insertions(+), 25 deletions(-) diff --git a/docs/nodice/static.rst b/docs/nodice/static.rst index 616dafe..0926a2f 100644 --- a/docs/nodice/static.rst +++ b/docs/nodice/static.rst @@ -28,7 +28,15 @@ understanding of what I think we may be seeing. I was going to edit the `expanding.rst` piece, but correcting things round here that are not quite right would be a long project. -So a new piece is in order. +So a new piece is in order. Almost everything below appears in some +form or other in Colin Rourke's, "A new paradigm for the universe". + +The arguments there are very much more precise and much of the book +explores the mathematics of de Sitter space, having established strong +arguments why it is appropriate. + +In what follows I am just trying to articulate my current view and +understanding of what we may be seeing. Outline ======= @@ -39,38 +47,104 @@ Outline This should also be true of time as well as space -I like to think of this as *space is pretty much the same everywhere*. +I like to think of this as *space is pretty much the same +everywhere*. Indeed, as we look into the heavens this does appear to be the case. Spiral galaxies as far as the eye can see. +Our immediate vicinity (say withing 50-100 million light years) is +a well catalogued collection of some 800 or so galaxies. + There is a peculiarity with red-shift in our observations. The further away a galaxy is the redder it looks. Galaxies further away are moving faster and faster, the further away they are, the faster they are receding is conventional wisdom. +Certainly, the red shifts in our observations are increasing as +galaxies get further away. + How does this square with the PCP? In short it does not. -Short distances, Minkowski metric is fine. +This does not mean that the red shift is not real, rather that the +interpretation that it means the distant galaxies are receding at +super-luminal speed, is in-correct. + +However, for the purpose of calculation in *de Sitter space* is ideal +as it nicely models this expansion. + +Now, I would argue that in reality, over longer distances redshift +accumulates. + +This is indistinguishable from the case that more distant sources are +receding faster and the intervening space is not changing anything. -Indeed, most of the time relative velocities are a small fraction (< -0.01) of the speed of light and simple cartesian geometry suffices. +Regardles what the reality is, there comes a distance when the +Minkowski metric starts to make a difference, the galaxy appears to be +receding at a significant portion of light. -Over longer distances redshift accumulates, and since this is (largely?) -indistinguishable from the case that more distant sources are receding -faster and the intervening space is not changing anything, there comes -a distance when the Minkowski metric starts to make a difference. +In our locality, most of the time relative velocities are a small +fraction (< 0.01) of the speed of light and simple cartesian geometry +suffices for calculation. -The Minkowski metric starts to become important in calculations, since -the aparent relative velocity is approaching a significant proportion -of the speed of light. +Further out, the Minkowski metric starts to become more important in +calculations, since the aparent relative velocity is approaching a +significant proportion of the speed of light. + +The magic piece in all this is the way that matter appears to create +space. A mental picture I use is time slowing, but it has to be noted +that in de Sitter Space time and position are intertwined. + +All this happens in a way that does not break causality. Light +arrives at the reciever in the same order that it leaves the emitter. + +The *Minkowski* metric is important here (cf Zeeman Causality implies +Lorentz group). + +In [1] shows how in de Sitter space light arriving from a distant +emitter to an observer always follows the same pattern, due to +symmetries within de Sitter space. Static Universe =============== + +By *static* I mean the PCP universe described above. + +Galaxies as far as you can go. + +But those beyond A we may never have seen (or have we?) and others we +have seen since time eternity. + +Some equations and numbers to keep in mind:: + + A = M * N + + M = 10^11 suns equals 0.03 in natural units. + N = 10^10 + + c = 3e8 m/s + + v = 3e5 m/s + + v ~= c / 1000 + +The size of the visible universe, *a*, the mean mass of a galaxy, *M* +and the number of galaxies, *N*. **a = N * M**. + +Why it appears to expand. + +What we can calculate from the rate of expansion we see. The inertial +drag of galactic cores across the universe. + +In turn, this should give a value to tune galactic rotation models +to. I.e. to understand why we see the specific rotation curves for +velocity of stars in a galaxy. + +It also should apply to planetary orbit calculations. Expansion as an illusion ======================== @@ -78,6 +152,9 @@ Expansion as an illusion Gamma Ray Burst =============== +All emitters arrive with a burst. + +This may be preceded by a long period of microwave background noise. de Sitter Space =============== @@ -85,12 +162,84 @@ de Sitter Space Cosmic Microwave Background Radiation ===================================== +Gravitational Waves +=================== + +The *O3* observation run is now well underway. + +Some 30-40 detections over a period of six months. + +Much talk of multi-messenger astronomy, but so far a shortage of +examples where simultaneous observations have been made, as far as I +am aware. + +I still need to go back and take a closer look at sky map localisation +for these events. + +For now, this is a good source of information and data relating to +gamma ray bursts and gravitational waves:: + + https://gcn.gsfc.nasa.gov/selected.html + + +I have spent considerable time puzzling over gravitational waves and +whether they will show the same propogation peculiarities that light +does. + +I feel they will and that the some (perhaps all) of the events that +LIGO is detecting are in fact new cosmic arrivals. + +Why am I skeptical of colliding black holes? +-------------------------------------------- + +There are a number of reasons that I am skeptical. + +a. I am not convinced it is possible for matter to create waves in this + way, in short I am not sure gravity works quite like that. + +b. The distribution of sizes of colliding objects. Why do we not see + collisions of bigger objects? Is the distance distribution skewed + in any way? + +c. I believe all the current detection processing line works of + templates derived from more detailed calculations using the Kerr + metric, but I could be wrong. + +d. The arrival of a new galaxy at the Hubble distance may trigger a + gravitational wave, similar to the way it triggers a gamma ray burst. + +Regardless of what is happening, it would be productive to try to +simulate the merging of black holes using the physics of [1]. + +With respect to d., this raises the question of why we do not seem to +be seeing simultaneous gamma ray bursts and gravitational waves. + +This may be because: + +1. we have incomplete coverage + +2. in general the gravitational wave and gamma ray bursts can happen + some considerable time apart. + +3. It is more like an eclipse: some receivers see the total eclipse, + some just get the penumbra. + +4. We cannot hope to understand this without modelling universal + harmonics observed in the cosmic microwave background. + +5. Actually, the pattern we see in the CMRB comes almost entirely from + lensing by our local galaxies, once that is removed there's not + much left. + +Or some collection of the above. + + Arriving and departing ====================== - -========================================= +Notes +===== Observations would seem to show that our visible universe is saturated with galaxies. @@ -113,6 +262,12 @@ New arrivals and old friends. Harmonics ========= +The harmonics of the universe seem to be on a scale commensurate with +the typical galactic peculiar velocity. + +How far can the gravitational wave from a galaxy go before the galaxy +has done a full rotation? + Magnetism and the speed of a stream of electrons? diff --git a/karmapi/grb.py b/karmapi/grb.py index ae43393..9e3c4eb 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -199,6 +199,8 @@ async def run(self): if sun: self.offset = (sun.body.ra.rad - math.pi) * -1 print("WITH SUN", self.offset / math.pi) + else: + self.offset += math.pi/10 @@ -212,18 +214,26 @@ async def run(self): norm = colors.Normalize(min(ball_colours), max(ball_colours)) cm = plt.get_cmap() for ball, loc, colour in zip(self.balls, locs, ball_colours): - ma = ball.data['major_axis'] - if (ma or 1) > 20: - constellation = coordinates.get_constellation(ball.body) + ma = ball.data['major_axis'] or 1 + ngn = ball.data.get('neighbor_galaxy_name', '') + constellation = coordinates.get_constellation(ball.body) + #if (ma or 1) > 20: + #if 'ilky' in ngn or 'ilky' in constellation: + if 'ilky' in ball.name: print() print(constellation) print(ball) - ax.text(self.spinra(loc[1]), loc[0], constellation, - color=cm(1.0-norm(colour)), fontsize=10 * math.log(max(ma, 10)) / 10) + + ax.text( + self.spinra(loc[1]), loc[0], + '\n'.join((ball.name)), + color='red', + #color=cm(1.0-norm(colour)), + fontsize=15 * math.log(max(ma, 10)) / 10) - #self.planets = [] + self.planets = [] planet_xx = [x.body.ra.radian - math.pi for x in self.planets] planet_yy = [x.body.dec.radian for x in self.planets] #planet_xx = [self.spinra(x) for x in planet_xx] @@ -272,11 +282,6 @@ async def run(self): ax.text(loc[0], loc[1], constellation + '\n' + ball.name, color=colour, fontsize=8) - if False: - for pp in self.planets: - ax.text(pp.body.ra.radian - math.pi, - pp.body.dec.radian + math.pi/10, - pp.name, color='yellow') #plt.colorbar(cc) ax.axis('off') @@ -680,6 +685,8 @@ async def run(args): print('clean galaxy data') print(gals[0]) + + for gal in gals: #gbod = Body('sun', t=t) ra = gal['ra'] @@ -688,9 +695,12 @@ async def run(args): gbod.distance = gal['distance'] gbod.data = gal #gbod.body = coordinates.SkyCoord(ra, dec, unit='deg') + #if 'neighbor_galaxy_name' in gal: + # gbod. gbod.name = gal['name'] + spheres.append(gbod) print("GOT spheres", len(spheres)) From d9a76325d70d55c1f973da4eae9b1f0ec76e1058 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 22 Oct 2019 14:31:47 -0400 Subject: [PATCH 584/642] static noise and grb tinkering --- docs/nodice/static.rst | 89 +++++++++++++++++++++++++++++++++++++----- karmapi/grb.py | 13 +++--- 2 files changed, 86 insertions(+), 16 deletions(-) diff --git a/docs/nodice/static.rst b/docs/nodice/static.rst index 0926a2f..a4df249 100644 --- a/docs/nodice/static.rst +++ b/docs/nodice/static.rst @@ -56,6 +56,9 @@ Spiral galaxies as far as the eye can see. Our immediate vicinity (say withing 50-100 million light years) is a well catalogued collection of some 800 or so galaxies. +So let's assume the rest of the universe is more of the same, at least +for the next 40 billion light years or so. + There is a peculiarity with red-shift in our observations. The further away a galaxy is the redder it looks. @@ -67,17 +70,20 @@ galaxies get further away. How does this square with the PCP? -In short it does not. +In short it does not. In some parts of the universe, galaxies zipping +by at close to the speed of light, whereas in our vicinity the average +speed is about one thousandth of that. This does not mean that the red shift is not real, rather that the interpretation that it means the distant galaxies are receding at -super-luminal speed, is in-correct. +super-luminal speed, may be in-correct. However, for the purpose of calculation in *de Sitter space* is ideal as it nicely models this expansion. -Now, I would argue that in reality, over longer distances redshift -accumulates. +I would suggest that in reality, that space itself creates a drag on +time and red shift accumulates as light passes longer and longer +distances. This is indistinguishable from the case that more distant sources are receding faster and the intervening space is not changing anything. @@ -104,9 +110,9 @@ arrives at the reciever in the same order that it leaves the emitter. The *Minkowski* metric is important here (cf Zeeman Causality implies Lorentz group). -In [1] shows how in de Sitter space light arriving from a distant -emitter to an observer always follows the same pattern, due to -symmetries within de Sitter space. +[1] shows how in de Sitter space light arriving from a distant emitter +to an observer always follows the same pattern, due to symmetries +within de Sitter space. Static Universe @@ -162,8 +168,8 @@ de Sitter Space Cosmic Microwave Background Radiation ===================================== -Gravitational Waves -=================== +Gravitational Waves update +========================== The *O3* observation run is now well underway. @@ -186,9 +192,19 @@ I have spent considerable time puzzling over gravitational waves and whether they will show the same propogation peculiarities that light does. -I feel they will and that the some (perhaps all) of the events that +I feel they will and that some, perhaps all, of the events that LIGO is detecting are in fact new cosmic arrivals. +This would raise a puzzle over why we are not routinely seeing +coincident gamma ray bursts. It is something I have puzzled over +without fully resolving. + +It is early days for gravitational wave detection. Presumably, the +current detections are the larger end of the event spectrum, so that +may give a clue. + + + Why am I skeptical of colliding black holes? -------------------------------------------- @@ -274,6 +290,44 @@ Magnetism and the speed of a stream of electrons? Plan ==== +Mass times angular velocity over distance. + +We know the mass and the distance, but what is the actual angular +velocity of the galaxy? + +Assume on average, there is a shift in space time, amounting to +~70km/s over a distance of 3.2 million light years (= 1 mega parsec). + +A change in velocity of about c/4000 where c is the speed of light. + +Now if we approximate things and assume the nearest galaxies account +for the major part of this change, then we can look at the path that +the light takes from each galaxy and calculate the aggregate effect of +all the galaxies on that light as it makes its journey to us. + +For this to give a useful estimate we would need good estimates for a +number of parameters for each galaxy in the neighbourhood:: + + mass + + distance + + velocity of the galaxy + + redshift + +There is likely enough information to estimate each of these, although +in many cases the various parameters are inter-twined. + +We can also take a statistical approach, including computer +simulation, to model either the local galaxies or a larger universe. + +Constrain the simulation to obey Hubble expansion. + + k omega mass / r + +galaxies. + Hubble constant. Allows calibration of inertial drag. Observations in nearby galaxies alone should be plenty to get a @@ -287,6 +341,21 @@ galactic tidal effects and harmonics. I also suspect that magnetism, protons and electrons may play a role. +Software +-------- + +Understand the software used in gravitational wave processing. + +Specifically, the `bayefits` used in creating sky maps for the source +of gravitational waves. + +More generally, work more with `astropy`. + +In particular, `astropy.coordinates`. + +Karmapi and Blume +----------------- + [1] Another paradigm for the universe. Colin Rourke. aka "The Book of magic." diff --git a/karmapi/grb.py b/karmapi/grb.py index 9e3c4eb..5c2ec00 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -201,7 +201,7 @@ async def run(self): print("WITH SUN", self.offset / math.pi) else: self.offset += math.pi/10 - + self.offset = 0 ball_colours = [x.distance for x in self.balls] @@ -216,10 +216,11 @@ async def run(self): for ball, loc, colour in zip(self.balls, locs, ball_colours): ma = ball.data['major_axis'] or 1 ngn = ball.data.get('neighbor_galaxy_name', '') - constellation = coordinates.get_constellation(ball.body) + #constellation = coordinates.get_constellation(ball.body) + constellation = '' #if (ma or 1) > 20: - #if 'ilky' in ngn or 'ilky' in constellation: - if 'ilky' in ball.name: + if 'ilky' in ngn or 'ilky' in constellation: + #if 'ilky' in ball.name: print() print(constellation) @@ -227,13 +228,13 @@ async def run(self): ax.text( self.spinra(loc[1]), loc[0], - '\n'.join((ball.name)), + '\n'.join((ball.name, constellation)), color='red', #color=cm(1.0-norm(colour)), fontsize=15 * math.log(max(ma, 10)) / 10) - self.planets = [] + #self.planets = [] planet_xx = [x.body.ra.radian - math.pi for x in self.planets] planet_yy = [x.body.dec.radian for x in self.planets] #planet_xx = [self.spinra(x) for x in planet_xx] From 122242d55e94c5f35a2e7a9178062d8f21df29ad Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 21 Jan 2020 15:51:22 -0500 Subject: [PATCH 585/642] crontab updates and misc older debris --- crontab/sense | 4 +-- crontab/veyes | 4 +-- docs/nodice/static.rst | 31 +++++++++++++++---- docs/transport.rst | 69 ++++++++++++++++++++++++++++++++++++++++++ karmapi/grb.py | 19 ++++++------ 5 files changed, 108 insertions(+), 19 deletions(-) create mode 100644 docs/transport.rst diff --git a/crontab/sense b/crontab/sense index 89f4d6e..8747dc7 100755 --- a/crontab/sense +++ b/crontab/sense @@ -1,4 +1,4 @@ -@reboot pi /usr/local/bin/python3.6 -m karmapi.sense --path /home/pi/karmapi/sensehat +@reboot pi /usr/bin/python3 -m karmapi.sense --path /home/pi/karmapi/sensehat # crashes at 1 second past midnight, so start a new day -0 0 * * * pi /usr/local/bin/python3.6 -m karmapi.sense --path /home/pi/karmapi/sensehat +0 0 * * * pi /usr/bin/python3 -m karmapi.sense --path /home/pi/karmapi/sensehat diff --git a/crontab/veyes b/crontab/veyes index bb60dd2..24ab325 100755 --- a/crontab/veyes +++ b/crontab/veyes @@ -1,5 +1,5 @@ -#@reboot pi /usr/local/bin/python3.6 -m karmapi.veyes /home/pi/karmapi/camera +#@reboot pi /usr/bin/python3 -m karmapi.veyes /home/pi/karmapi/camera # default -- one picture per minute -@reboot pi /usr/local/bin/python3.6 -m karmapi.veyes /home/pi/karmapi/camera --sleep 60 +@reboot pi /usr/bin/python3 -m karmapi.veyes /home/pi/karmapi/camera --sleep 60 diff --git a/docs/nodice/static.rst b/docs/nodice/static.rst index a4df249..e05b331 100644 --- a/docs/nodice/static.rst +++ b/docs/nodice/static.rst @@ -70,9 +70,9 @@ galaxies get further away. How does this square with the PCP? -In short it does not. In some parts of the universe, galaxies zipping -by at close to the speed of light, whereas in our vicinity the average -speed is about one thousandth of that. +In short it does not seem to. In some parts of the universe, galaxies +zipping by at close to the speed of light, whereas in our vicinity the +average speed is about one thousandth of that. This does not mean that the red shift is not real, rather that the interpretation that it means the distant galaxies are receding at @@ -81,9 +81,8 @@ super-luminal speed, may be in-correct. However, for the purpose of calculation in *de Sitter space* is ideal as it nicely models this expansion. -I would suggest that in reality, that space itself creates a drag on -time and red shift accumulates as light passes longer and longer -distances. +Colin suggests it that space itself creates a drag on time and red +shift accumulates as light passes longer and longer distances. This is indistinguishable from the case that more distant sources are receding faster and the intervening space is not changing anything. @@ -168,6 +167,26 @@ de Sitter Space Cosmic Microwave Background Radiation ===================================== +Thermal with a temperature of 2.7 degrees Kelvin. + +This is the temperature of pretty much all of the intergalactic dust. + +So as light from distant galaxies looming over the horizon is shifted +red as it passes to us. At the Hubble distance it tends towards +being infinitely red shifted. + +There seems to be a contradiction in the model that views a gamma ray +burst as our first view of a distant source, and yet says that we see +galaxies looming in the distance in the form of the CMB. + +It is important to realise that the reason that the CMB is in such +good agreement with thermal equilibrium is because the universe itself +is in such a state of thermal equilibrium. + +Once light rays get shifted to microwave, they just add to this +thermal background. + + Gravitational Waves update ========================== diff --git a/docs/transport.rst b/docs/transport.rst new file mode 100644 index 0000000..807e31d --- /dev/null +++ b/docs/transport.rst @@ -0,0 +1,69 @@ +================ + Beyond the car +================ + +The car has shaped cities for many decades. + +Giant highways linking cities of congestion. + +Suburbs commuting to cities for work. + +How about a re-think? + + +Cities +====== + +Great cities are easy to get around. + +London and Paris, use the underground. + +Netherlands, ride a bike. + + +Everything but the last mile +============================ + +For many journeys it is only the last mile or so where the roads have +a reasonable volume of traffic, say 10 vehicles per minute. + +Let's build a network for the 10 per minute roads. + +The idea is to have a hierarchy of connections. + +Enter a pod, enter a destination and away you go. + +Slowly downtown, as pods move around 15km, weaving with bikes, and +taking the podlift over junctions. + +Synching with a collector that lifts the pod into the maglev network. + +For a short journey just stay in the pod, you'll be sent down the +slippage towards your destination. + +If you're on a bike, but with further to go, try a bike pod. + +Or take one of the routes that has bike antigravity assist. + +And if you are on foot then you can walk through all of town without +having to wait for vehicles. + +The last mile +============= + +Downtown, 10 block areas. + +Bikes, pedestrians and low speed (15-20km/h) lightweight vehicles. + +Magic shuttles 20km/h no stops. + +No door problems. + +Experiment with winter routes which take advantage of snow and ice. + +Dual: bike/ski routes? At least one should be good. + + + +How to get from here to there? +============================== diff --git a/karmapi/grb.py b/karmapi/grb.py index 5c2ec00..6b81e95 100644 --- a/karmapi/grb.py +++ b/karmapi/grb.py @@ -123,7 +123,8 @@ from matplotlib import colors import blume -from blume import magic, farm +from blume import magic +from blume import farm as fm from karmapi import cpr @@ -287,7 +288,7 @@ async def run(self): #plt.colorbar(cc) ax.axis('off') - await self.outgoing.put(magic.fig2data(plt)) + await self.put(magic.fig2data(plt)) fig.clear() @@ -706,23 +707,23 @@ async def run(args): print("GOT spheres", len(spheres)) - the_farm = farm.Farm() + farm = fm.Farm() ss = SkyMap(balls=spheres, planets=planets, fade=args.fade, twist=args.twist) - - the_farm.add_edge(ss, the_farm.carpet) - the_farm.add_edge(farm.GuidoClock(), the_farm.carpet) + farm.add_node(ss, background=True) + farm.add_edge(ss, farm.carpet) + farm.add_edge(fm.GuidoClock(), farm.carpet) #spheres = cpr.args_to_spheres(args) #farm.add(cpr.NestedWaves, dict( # balls=spheres, fade=args.fade, # twist=args.twist)) - the_farm.setup() - starter = await curio.spawn(the_farm.start()) + #farm.setup() + starter = await curio.spawn(farm.start()) print('farm runnnnnnnnnning') - runner = await the_farm.run() + runner = await farm.run() def gravity_waves(path): From 87a2b49327e7d3f2bb02a291f3a75facbc904b6b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 21 Jan 2020 15:54:35 -0500 Subject: [PATCH 586/642] curious case of the missing colon --- karmapi/veyes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karmapi/veyes.py b/karmapi/veyes.py index 27d997b..850cf60 100644 --- a/karmapi/veyes.py +++ b/karmapi/veyes.py @@ -53,7 +53,7 @@ def random_picture(cam): return cam -def as_pil(camera) +def as_pil(camera): """ Capture an image and return as PIL.Image """ # Create the in-memory stream stream = BytesIO() From 7598ef6ab0e5d5d3aa0ab9277d6f20cb821de113 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 21 Jan 2020 18:14:36 -0500 Subject: [PATCH 587/642] tankrain cron entry update --- crontab/tankrain | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crontab/tankrain b/crontab/tankrain index 0dd46ca..d531aed 100755 --- a/crontab/tankrain +++ b/crontab/tankrain @@ -1,3 +1,3 @@ DISPLAY=:0 PIG=hat -@reboot pi /usr/local/bin/python3.6 -m karmapi.tankrain /home/pi/karmapi/camera +@reboot pi /usr/bin/python3 -m karmapi.tankrain /home/pi/karmapi/camera From 308cac9645bddce03ee872405881b3820bb843ef Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 21 Jan 2020 18:28:09 -0500 Subject: [PATCH 588/642] as_pil currently broken in veyes --- karmapi/veyes.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/karmapi/veyes.py b/karmapi/veyes.py index 850cf60..94c9781 100644 --- a/karmapi/veyes.py +++ b/karmapi/veyes.py @@ -85,8 +85,8 @@ async def capture(args): path = path / f'{now.hour:02}{now.minute:02}{now.second:02}.jpg' print(path) - #camera.capture(str(path)) - image = as_pil(camera) + camera.capture(str(path)) + #image = as_pil(camera) await curio.sleep(args.sleep) if self.dedupe: @@ -94,7 +94,7 @@ async def capture(args): pass # save the image - image.save(path) + #image.save(path) if args.random: camera = random_picture(camera) From 014b55d3130a3cb9f934da8d2af697185099be55 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 23 Jan 2020 15:37:01 -0500 Subject: [PATCH 589/642] veyes dedupe flag --- karmapi/veyes.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/karmapi/veyes.py b/karmapi/veyes.py index 94c9781..0819204 100644 --- a/karmapi/veyes.py +++ b/karmapi/veyes.py @@ -89,7 +89,7 @@ async def capture(args): #image = as_pil(camera) await curio.sleep(args.sleep) - if self.dedupe: + if args.dedupe: # Compare image to last and save if it is different enough pass @@ -107,6 +107,7 @@ def main(): parser.add_argument('path', nargs='?', default='.') parser.add_argument('--long', action='store_true') parser.add_argument('--random', action='store_true') + parser.add_argument('--dedupe', action='store_true') args = parser.parse_args() From bcca592cd8458b1938071839933c7a4dfd0bef13 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 30 Jan 2020 15:31:52 -0500 Subject: [PATCH 590/642] pandas 1.0 is here --- karmapi/base.py | 4 +++- karmapi/pigfarm.py | 5 +++-- karmapi/sense.py | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/karmapi/base.py b/karmapi/base.py index f73dc1c..1c1b114 100644 --- a/karmapi/base.py +++ b/karmapi/base.py @@ -17,9 +17,11 @@ from collections import defaultdict from operator import itemgetter +import numpy as np +fft = np.fft + try: import pandas - fft = pandas.np.fft except Exception as e: print(e) print('NO PANDAS') diff --git a/karmapi/pigfarm.py b/karmapi/pigfarm.py index 61a4a6d..e72592e 100644 --- a/karmapi/pigfarm.py +++ b/karmapi/pigfarm.py @@ -6,7 +6,8 @@ """ import pandas # piglets and pandas together -np = pandas.np +import numpy as np + try: from pandas.core.indexes.datetimes import DatetimeIndex @@ -730,7 +731,7 @@ def draw_plot(self): # sort columns on mean mean = frame.mean() mean.sort_values(inplace=True) - frame = frame.ix[:, mean.index] + frame = frame[mean.index] # subtract the mean if self.subtract_means: diff --git a/karmapi/sense.py b/karmapi/sense.py index 6504530..b8812d8 100644 --- a/karmapi/sense.py +++ b/karmapi/sense.py @@ -343,7 +343,7 @@ def timewarp_timestamps(data): if lasttime and timestamp < lasttime: timewarp = lasttime - timestamp - print(ix, timewarp) + print('timewarp', ix, timewarp) elif timewarp: mc = deltas.most_common(1)[0][0] From 6d8b7c4bc726cfdef4d5e4ab4d8af9c092002bef Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 31 Jan 2020 11:21:34 -0500 Subject: [PATCH 591/642] simple script to display sense hat values --- karmapi/hat.py | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 karmapi/hat.py diff --git a/karmapi/hat.py b/karmapi/hat.py new file mode 100644 index 0000000..a024d21 --- /dev/null +++ b/karmapi/hat.py @@ -0,0 +1,40 @@ + +import random +import datetime +import sense_hat + + +class HatInfo: + + def __init__(self): + + self.hat = sense_hat.SenseHat() + self.stick = sense_hat.SenseStick() + + self.hat.rotation = 90 + + def whattimeisit(self): + + return f'{datetime.datetime.now():%H:%M}' + + def run(self): + + h = self.hat + messages = [ + f'Temp: {h.temp:0.1f}', + f'Pres: {h.pressure:0.1f}', + f'Humi: {h.humidity:0.1f}', + f'Time: {self.whattimeisit()}'] + + while True: + ix = random.randint(0, len(messages)-1) + + h.show_message(messages[ix], + scroll_speed=0.2) + + +if __name__ == '__main__': + + h = HatInfo() + + h.run() From 52a95dcac14595d24b93eafc39346fca153cdde0 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 31 Jan 2020 11:23:08 -0500 Subject: [PATCH 592/642] sense clean start new file if time goes backwards --- karmapi/base.py | 4 --- karmapi/sense.py | 83 +++++++++++++++++++++++++++++------------------- 2 files changed, 50 insertions(+), 37 deletions(-) diff --git a/karmapi/base.py b/karmapi/base.py index 1c1b114..bc735b4 100644 --- a/karmapi/base.py +++ b/karmapi/base.py @@ -110,7 +110,6 @@ def meta_data_match(path, key='gets'): """ Work our way along path looking for a match """ folders = list(path.parts) - print(folders) bases = [] relatives = folders[1:] @@ -209,7 +208,6 @@ def get_all_meta_data(path): path = [] for field in fields: path.append(field) - print(path) meta_data = meta.update( load_meta_path(Path(*path))) @@ -272,9 +270,7 @@ def build_from_meta(path): def load_meta_path(path): """ Load meta data a path if it exists """ filename = path / 'meta.json' - print(filename) if filename.exists(): - print(filename, 'exists') with filename.open() as infile: return json.loads(infile.read()) diff --git a/karmapi/sense.py b/karmapi/sense.py index b8812d8..73ead98 100644 --- a/karmapi/sense.py +++ b/karmapi/sense.py @@ -284,13 +284,10 @@ def drop_bad_rows(infile): print(fields) nn = len(fields) - + + lasttime = 0.0 for ix, row in enumerate(infile): - # sometimes get nulls in data eg when pi not shutdown cleanly - if null in row: - continue - values = row.split(',') values = [x.strip() for x in values] @@ -298,12 +295,25 @@ def drop_bad_rows(infile): print(ix, len(fields), len(values)) continue - result.append(dict(zip(fields, values))) + # turn values into a dictionary + data = dict(zip(fields, values)) - return result + timestamp = float(data.get('timestamp', 0)) + + # sometimes get nulls in data eg when pi not shutdown cleanly + if null in row or timestamp < lasttime: + yield result + result = [] + lasttime = 0 + continue + + lasttime = timestamp + result.append(data) -def xtimewarp_timestamps(data): - """ Don't let data go backwards in time """ + yield result + +def check_timestamps(data): + """ See if data go backwards in time """ lasttime = None timewarp = 0.0 @@ -312,14 +322,12 @@ def xtimewarp_timestamps(data): timestamp = float(row['timestamp']) if lasttime and timestamp < lasttime: - timewarp = lasttime - timestamp - print(ix, timewarp) + print('timewarp', ix, timestamp-lasttime, timestamp, lasttime) - row['timestamp'] = str(timestamp + timewarp) + #row['timestamp'] = str(timestamp + timewarp) lasttime = timestamp - return data def timewarp_timestamps(data): """ Don't let data go backwards in time """ @@ -363,31 +371,40 @@ def clean(path): put clean files in clean subfolder. """ (path / 'clean').mkdir(exist_ok=True, parents=True) - + for name in path.glob('*'): if name.is_dir(): continue with name.open() as dirty: - data = drop_bad_rows(dirty) - data = timewarp_timestamps(data) - - fields = data[0].keys() - clean_name = path / 'clean' / name.name - with clean_name.open('w') as cleaner: - writer = csv.DictWriter(cleaner, fieldnames=fields) - writer.writeheader() - writer.writerows(data) - - df = base.load(clean_name) - - # change pressure to altitude if it exists - if hasattr(df, 'pressure'): - df['altitude'] = df.pressure.map(pressure_to_altitude) - - df = df.drop('pressure', axis=1) - - base.save(clean_name, df) + for part, data in enumerate(drop_bad_rows(dirty)): + print(part, name) + if not(data): + continue + + fields = data[0].keys() + + if 'timestamp' in fields: + check_timestamps(data) + + clean_name = path / 'clean' / name.name + if part: + clean_name = path / 'clean' / (name.name + f'{part}') + + with clean_name.open('w') as cleaner: + writer = csv.DictWriter(cleaner, fieldnames=fields) + writer.writeheader() + writer.writerows(data) + + df = base.load(clean_name) + + # change pressure to altitude if it exists + if hasattr(df, 'pressure'): + df['altitude'] = df.pressure.map(pressure_to_altitude) + + df = df.drop('pressure', axis=1) + + base.save(clean_name, df) class HatShow: """ Show things on a Sense Hat """ From 6e3dda6fb686a899e1a707875f852cf6e1677ec9 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 31 Jan 2020 11:34:01 -0500 Subject: [PATCH 593/642] tinker with hat noddy --- karmapi/hat.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/karmapi/hat.py b/karmapi/hat.py index a024d21..d4d751f 100644 --- a/karmapi/hat.py +++ b/karmapi/hat.py @@ -20,17 +20,18 @@ def whattimeisit(self): def run(self): h = self.hat - messages = [ - f'Temp: {h.temp:0.1f}', - f'Pres: {h.pressure:0.1f}', - f'Humi: {h.humidity:0.1f}', - f'Time: {self.whattimeisit()}'] - while True: - ix = random.randint(0, len(messages)-1) - h.show_message(messages[ix], - scroll_speed=0.2) + messages = [ + f'T: {h.temp:0.1f}', + f'P: {h.pressure:0.1f}', + f'H: {h.humidity:0.1f}', + f'TT: {self.whattimeisit()}'] + + + for message in messages: + h.show_message(message, + scroll_speed=0.2) if __name__ == '__main__': From b798642a9da9ebfe154cddff77eac636fc5acb02 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 18 Mar 2020 13:55:23 -0400 Subject: [PATCH 594/642] add tankrain option to save a day of images as a gif --- karmapi/tankrain.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index 903c334..33f1d7b 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -86,6 +86,7 @@ def __init__(self, parent, path=None, version='local', date=None, self.add_event_map('X', self.switcheroo) self.add_event_map('S', self.save) self.add_event_map('T', self.toggle_title) + self.add_event_map('G', self.create_gif) def load_images(self): @@ -227,6 +228,27 @@ async def save(self): target.parent.mkdir(parents=True, exist_ok=True) self.data.save(target) + async def create_gif(self): + """ Turn images into a gif """ + frames = [] + for path in self.paths: + frames.append(Image.open(path)) + + when = self.when() + target = Path(self.save_folder or '.') + target /= f'{when.year}{when.month}{when.day}.gif' + + # fixme -- where's the path + print('saving to', target) + target.parent.mkdir(parents=True, exist_ok=True) + + + frames[0].save( + str(target), + format='GIF', + append_images=frames[1:], save_all=True, duration=100, loop=0) + + async def switcheroo(self): """ switcheroo From 698046b54eda30d4adf3eb7f016a88a08f160ff9 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 24 Mar 2020 10:10:48 -0400 Subject: [PATCH 595/642] social distance and time --- docs/social.rst | 66 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 docs/social.rst diff --git a/docs/social.rst b/docs/social.rst new file mode 100644 index 0000000..cdff873 --- /dev/null +++ b/docs/social.rst @@ -0,0 +1,66 @@ +========= + Bobby's +========= + +Space and time are different aspects of the same thing. + +We can use time to put distance between us. + +Food stores are already doing this with semi-formal 8-9am seniors only +rules. + +Today I went out for a ride on the bike across Ottawa. + +Barely any traffic, but small business after small business closed. + +Small cafes, bars, restaurants, a bike shop, maps of the world. All +closed. + +I'm missing Bobby's after a winter of breakfasts on the way to the +hills. + +It's now March 23rd, a day later. + +Thoughts about how to distance in time. + +How much is two metres in time? + +Distracted by the bingo in Dublin. Distance, time and distributed consensus. + +Distance and time, different aspects of the same thing. + +We can social distance with time too. + +Imagine a community, 10 blocks in a city? Along the same bus route? + +What happens if only one tenth are outside each day? And they stay +inside the other nine? + +Today is day zero. If your zip code ends in a 0, you get to go to +your place of choice within 10 minutes walking distance. + +Tomorrow, will be day 1. And so on, unless some event resets the +clock. + +Such a strategy would need to be done alongside random testing to +allow tuning of the parameters and testing various hypotheses over +time. + +I suspect it might be wise to rotate staff in sync with customers, so +a place might need ten shifts, based on the same codes. So prepare to +be a trainee in case they are short when you visit. + +For a school, often friends and siblings are at the same school. So +do the day zero thing based on zip codes with families at schools and +teachers too. + +Oh and don't let anyone near the chefs. + +Combine it all with random testing so you can tune it a little. + +And add in noise of all sorts due to people misunderstanding the instructions. + +If new infections are zero for long enough, allow two digits out each day. + +But that's all a way down the road for now I'm afraid. + From 349013e0b6708545a5e215cce7df1251c4770b61 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 24 Mar 2020 13:26:33 -0400 Subject: [PATCH 596/642] bike net c19 --- docs/bikes.rst | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 docs/bikes.rst diff --git a/docs/bikes.rst b/docs/bikes.rst new file mode 100644 index 0000000..f3b4568 --- /dev/null +++ b/docs/bikes.rst @@ -0,0 +1,55 @@ +================================= + Distance and time with bicycles +================================= + +There is a lot of good information in this article, particular in +regards to how c19 seems to be spreading:: + + https://www.nytimes.com/2020/03/22/health/coronavirus-restrictions-us.html + +Outbreaks tend to be family groups, friends, people who work together, +a restaurant or cafe. + +Transmission seems to be greater in groups which spend more time +together. My guess (and it is a guess) is most (90%?) infections come +from airborn transmission. + +We breath out a large amount of virus, very much larger amounts when +we cough. The amount that transmits between two people drops rapidly +with distance, but increases significantly when in close proximity for +a large amount of time. + +Atmospheric conditions such as extreme cold, wind, humidity, warmth +may significantly affect transmission. Is there existing research in +this area? + +I hope someone is researching outdoor versus indoor transmission +rates for c19, although recognise this is challenging to do. + +For outdoor rates, the atmospheric conditions would seem relevant. + +Indoor, we are being told 2 metres apart, so let's go with that +outside, or raise it to 5m when we can. + +Large food stores are currently the largest gatherings. + +It would seem this is an area where more segmenting of customers would +help. For example, each day say which digits (last digit of a +Canadian post code?) get to go shopping. + +For the other days how about contact free bicycle delivery? + +Attach a trolley to your bike and you're part of bike net. + +Ride your bike to a loading area. + +Someone loads the cargo. + +Off you go. + +Divide the city into grids. + +Use traffic lights to synchronise movement through loading areas. + +In between a grid of traffic free bicycle priority lanes with a 5 metre +rule. From 215ece4ec95e8b54c09b44759ac3201622234fc7 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 5 May 2020 14:35:52 -0400 Subject: [PATCH 597/642] taskgroups for tasks and gifs for tankrain --- karmapi/piglet.py | 26 ++++++++++++-------------- karmapi/pixin.py | 7 ++++--- karmapi/tankrain.py | 12 +++++++++--- 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/karmapi/piglet.py b/karmapi/piglet.py index 789a621..70c0922 100644 --- a/karmapi/piglet.py +++ b/karmapi/piglet.py @@ -151,12 +151,13 @@ async def doit(self): async def run(self): """ Make the pig run """ # spawn task for each runner - coros = [] - for item in self.runners: - if inspect.iscoroutine(item): - coros.append(await(curio.spawn(item))) - await curio.gather(coros) + async with curio.TaskGroup() as coros: + + for item in self.runners: + if inspect.iscoroutine(item): + await coros.spawn(item) + class Grid(Pig): """ A grid of widgets """ @@ -418,18 +419,15 @@ async def magic(self, event, *args, **kwargs): async def run(self): - poll_task = await curio.spawn(self.poll()) + async with curio.TaskGroup() as tasks: + poll_task = await tasks.spawn(self.poll()) - flush_task = await curio.spawn(self.flush()) + flush_task = await tasks.spawn(self.flush()) - yosser_tasks = [] - for yosser in range(cpu_count()): + yosser_tasks = [] + for yosser in range(cpu_count()): - yosser_tasks.append(await curio.spawn(self.yosser(YQ))) - - tasks = [flush_task, poll_task] + yosser_tasks - - await curio.gather(tasks) + yosser_tasks.append(await tasks.spawn(self.yosser(YQ))) class Piglet(Pig): diff --git a/karmapi/pixin.py b/karmapi/pixin.py index 62154be..07abc2f 100644 --- a/karmapi/pixin.py +++ b/karmapi/pixin.py @@ -29,7 +29,7 @@ def parse(item): def pparse(pitem): """ Convert path into date time """ - fields = pitem.stem.split('_') + fields = pitem.stem.replace('~', '_').split('_') print(fields) name, day, second = fields[:3] @@ -44,7 +44,7 @@ def pparse(pitem): second = int(second[4:]) when = datetime.datetime(year, month, day, hour, minute, second) - print(when) + return when if __name__ == '__main__': @@ -76,4 +76,5 @@ def pparse(pitem): if where: where.parent.mkdir(exist_ok=True, parents=True) print(what, where) - shutil.copyfile(what, where) + if not where.exists(): + shutil.copyfile(what, where) diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index 33f1d7b..8ef8efb 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -235,18 +235,24 @@ async def create_gif(self): frames.append(Image.open(path)) when = self.when() + time = 20 # seconds target = Path(self.save_folder or '.') - target /= f'{when.year}{when.month}{when.day}.gif' + target /= f'{when.year}{when.month:02d}{when.day:02d}.gif' # fixme -- where's the path print('saving to', target) target.parent.mkdir(parents=True, exist_ok=True) + duration = 1000 * self.sleep + + n = time // duration frames[0].save( str(target), format='GIF', - append_images=frames[1:], save_all=True, duration=100, loop=0) + append_images=frames[1:n], + save_all=True, + duration=duration, loop=0) async def switcheroo(self): @@ -501,7 +507,7 @@ def main(args=None): parser = argparse.ArgumentParser() parser.add_argument('--pig', action='store_false', default=True) - parser.add_argument('--minutes', type=int, default=30) + parser.add_argument('--minutes', type=int, default=0.33) parser.add_argument('path', nargs='?', default='.') parser.add_argument('--version', default='') parser.add_argument('--save', From 33a71e649ea0ea4f85c1e17423bc6bb6cc53fdce Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 3 Dec 2020 23:49:27 -0500 Subject: [PATCH 598/642] old ideas and the start towards a new moon --- docs/transport.rst | 60 +++++++++++++++++++++++++++++++++++++++++++++ karmapi/moon.py | 3 +++ karmapi/tankrain.py | 7 ++++-- 3 files changed, 68 insertions(+), 2 deletions(-) diff --git a/docs/transport.rst b/docs/transport.rst index 807e31d..2f5897f 100644 --- a/docs/transport.rst +++ b/docs/transport.rst @@ -67,3 +67,63 @@ Dual: bike/ski routes? At least one should be good. How to get from here to there? ============================== + +I wrote the above in December 2019. + +It's now mid-May and still snowing. + +How to make transit less risky with covid-19. + +Distancing is hard on a bus. + +Some things that may help: + +* open windows + +* fewer passengers + +* give the driver space and open windows. + +* less time on the bus. + +How can we have less time on the bus? + +With less traffic we can create bus priority routes. + +With more buses we can have more serving each route, so they don't all +stop at every stop. + +So how can we get more buses? + +One option is to divide the area into a number of segments. + +Now suppose you rotate the buses round the segments. They all work +one segment. So if there were ten segments, you would get ten times +the number of buses, with long gaps in between. + +Typical buses, you wait 30 minutes then 8 come along at once. + +Most buses will miss most stops, so you get down town faster, less +time to share air. + +If distancing is in force, keep all the buses running to reduce spread. + + +Contact tracing and the transit pass +------------------------------------ + +Many transit systems have some sort of payment card such as *Presto* +or *Oyster*. + +In many cases there is a high percentage of riders that are using the +cards. + +Each time a user taps, the system knows where they are. If they take +the bus, the system presumably knows the bus number and route. + +For rail, things are more ambiguous, since tapping is often enough to +get to a platform, but there is no information on which train is +taken. + + + diff --git a/karmapi/moon.py b/karmapi/moon.py index e9e947f..fb7987b 100644 --- a/karmapi/moon.py +++ b/karmapi/moon.py @@ -22,6 +22,7 @@ """ +from blume import magic, farm import datetime @@ -197,3 +198,5 @@ async def tick(self): images(path, stamps, values) +if __name__ == '__main__': + pass diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index 8ef8efb..fda21b6 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -235,7 +235,7 @@ async def create_gif(self): frames.append(Image.open(path)) when = self.when() - time = 20 # seconds + time = 10e3 # micro seconds target = Path(self.save_folder or '.') target /= f'{when.year}{when.month:02d}{when.day:02d}.gif' @@ -245,7 +245,10 @@ async def create_gif(self): duration = 1000 * self.sleep - n = time // duration + n = int(time // duration) + + n = min(n, len(self.paths)) + print(target, n, time, duration) frames[0].save( str(target), From 0cc8c28e9c8ec45838bd4a0fcda9f7cfe6bafd37 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 19 Dec 2020 15:52:01 -0500 Subject: [PATCH 599/642] old oddments --- karmapi/hat.py | 5 +++-- karmapi/moon.py | 21 +++++++++------------ requirements.txt | 2 ++ 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/karmapi/hat.py b/karmapi/hat.py index d4d751f..fdbb255 100644 --- a/karmapi/hat.py +++ b/karmapi/hat.py @@ -29,8 +29,9 @@ def run(self): f'TT: {self.whattimeisit()}'] - for message in messages: - h.show_message(message, + for message, colour in zip(messages, colours): + + h.show_message(message, text_colour=colour, scroll_speed=0.2) diff --git a/karmapi/moon.py b/karmapi/moon.py index fb7987b..2df0dda 100644 --- a/karmapi/moon.py +++ b/karmapi/moon.py @@ -26,6 +26,8 @@ import datetime +import netCDF4 + NEW = datetime.datetime(1900, 1, 1, 5, 50) NEXTNEW = datetime.datetime(1900, 1, 30, 5, 22) @@ -145,17 +147,8 @@ async def tick(self): ORIGIN=AHU['orongo'] - parser.add_argument('--path', default='karmapi/ecmwf') - parser.add_argument('--value', default='t2m') - parser.add_argument('--raw', default='temperature.nc') - parser.add_argument('--date') - parser.add_argument( - '--pc', action='store_true', - help='do principal components') - - parser.add_argument('--delta', action='store_true') - parser.add_argument('--model', action='store_true') - parser.add_argument('--offset', type=int, default=0) + parser.add_argument('-path', default='karmapi/moai') + parser.add_argument('-dem', default='easter_island_3_isl_2016.nc') args = parser.parse_args() @@ -199,4 +192,8 @@ async def tick(self): if __name__ == '__main__': - pass + + animal = farm.Farm() + + # animal.add(???) + animal.run() diff --git a/requirements.txt b/requirements.txt index 82a3686..134c2f4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,7 @@ #jupyter for added goodness +blume # for the blooming table and the magic farm + astropy # so we can find jupiter and more From 3251074a3cb3a248adcf503a0ac120834e19f2d1 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 19 Dec 2020 15:57:02 -0500 Subject: [PATCH 600/642] sense hat work in progress --- karmapi/hat.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/karmapi/hat.py b/karmapi/hat.py index fdbb255..c9b2764 100644 --- a/karmapi/hat.py +++ b/karmapi/hat.py @@ -28,6 +28,13 @@ def run(self): f'H: {h.humidity:0.1f}', f'TT: {self.whattimeisit()}'] + colours = [ + [255, 255, 0], + [255, 0, 255], + [0, 255, 255], + [255, 255, 255], + ] + for message, colour in zip(messages, colours): From 2482e5b654c72ba34e983fcbf18ec5c13ae1cc3e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 19 Jan 2021 19:44:57 -0500 Subject: [PATCH 601/642] transport mutterings and moon moai --- docs/transport.rst | 33 +++++++++- karmapi/moon.py | 153 +++++++++++++++++++++++---------------------- 2 files changed, 110 insertions(+), 76 deletions(-) diff --git a/docs/transport.rst b/docs/transport.rst index 2f5897f..de0a348 100644 --- a/docs/transport.rst +++ b/docs/transport.rst @@ -61,7 +61,10 @@ No door problems. Experiment with winter routes which take advantage of snow and ice. -Dual: bike/ski routes? At least one should be good. +Dual: bike/ski routes? At least one should be good, whatever the +weather. + +Some days, you should just stay home and shovel. @@ -125,5 +128,33 @@ For rail, things are more ambiguous, since tapping is often enough to get to a platform, but there is no information on which train is taken. +2021 vision +=========== + +So what happened to transit in 2020? + +Where I live. People stayed home. + +Transit use was way down. Town was quiet. Too quiet. + +This allowed those relying on transport to get to essential work in +un-crowded buses, with open windows. + +In my city a combination ... + +Bus service cut and buses kept to timetable, it is still common to see +buses waiting to avoid being early. + +When you factor in apps that work with open data feeds giving bus +location information, sticking to the timetable makes less and less +sense, the more regular a service becomes. + +Decisions to reduce spending on transport at this time, have missed an +opportunity to experiment with a contrarian approach to see just how +good the transport can be. + +Over the summer efforts focussed on active transport. Many cities +have seen a boom in cycling, in particular. + diff --git a/karmapi/moon.py b/karmapi/moon.py index 2df0dda..d06247c 100644 --- a/karmapi/moon.py +++ b/karmapi/moon.py @@ -22,43 +22,51 @@ """ +from pathlib import Path +from matplotlib import pyplot as plt + from blume import magic, farm import datetime import netCDF4 -NEW = datetime.datetime(1900, 1, 1, 5, 50) +def puzzle(): + """ No idea what this is about + + New moons? + """ + NEW = datetime.datetime(1900, 1, 1, 5, 50) -NEXTNEW = datetime.datetime(1900, 1, 30, 5, 22) + NEXTNEW = datetime.datetime(1900, 1, 30, 5, 22) -delta = (NEXTNEW - NEW) + delta = (NEXTNEW - NEW) -deltas = delta.days * 24 * 3600 + deltas = delta.days * 24 * 3600 -print(delta.days) + print(delta.days) -deltas += delta.seconds + deltas += delta.seconds -print(deltas) + print(deltas) -latest = datetime.datetime(2017, 11, 18, 3, 43) + latest = datetime.datetime(2017, 11, 18, 3, 43) -ldelta = latest - NEW + ldelta = latest - NEW -seconds = ldelta.days * 24 * 3600 -seconds += ldelta.seconds + seconds = ldelta.days * 24 * 3600 + seconds += ldelta.seconds -print(seconds, seconds / deltas) + print(seconds, seconds / deltas) -current = NEW -for x in range(100): - print(current) + current = NEW + for x in range(100): + print(current) - current += delta + current += delta from collections import deque from math import pi @@ -103,24 +111,53 @@ def add(self, moai): # fixme push according to direction of travel self.queue.push(moai) -class moai: - - def __init__(self, m=1, x=0, y=0, z=0, t=0): - - self.x = x - self.y = y - self.z = z - self.t = t +def data_to_rows(data): + + # figure out what we have + import csv + for row in csv.reader(data): + keys = [x.strip() for x in row] + break + + for row in csv.DictReader(data[1:], keys): + yield row + - async def tick(self): + +class RapaNui(magic.Ball): - self.t += 1 + async def start(self): + + print('Starting Rapa Nui') + self.dem = netCDF4.Dataset(self.dem) - # loop to t udating position - for d in range(self.t): - # magnus magnus son needed - pass - + records = list(data_to_rows(open(self.moai).readlines())) + spell = magic.Spell() + spell.find_casts(records) + self.moai = list(spell.spell(records)) + + + async def run(self): + + data = self.dem['Band1'][::-1] + extent = ( + self.dem.geospatial_lon_min, self.dem.geospatial_lon_max, + self.dem.geospatial_lat_min, self.dem.geospatial_lat_max) + + plt.imshow( + data, extent=extent, vmin=self.vmin, vmax=self.vmax, + cmap=magic.random_colour()) + + #plt.imshow(data, extent=extent) + plt.colorbar() + + lats = [x['lat'] for x in self.moai] + lons = [x['lon'] for x in self.moai] + plt.scatter(lons, lats) + + # add ahu? + + await self.put() if __name__ == '__main__': @@ -147,53 +184,19 @@ async def tick(self): ORIGIN=AHU['orongo'] - parser.add_argument('-path', default='karmapi/moai') + parser.add_argument('-moai', default='moai.csv') + parser.add_argument('-vmin', default=-4000) + parser.add_argument('-vmax', default=500) parser.add_argument('-dem', default='easter_island_3_isl_2016.nc') args = parser.parse_args() - path = Path(args.path) - - for name, ahu in AHU.items(): - print(name, ahu) - - overandout - - df = load(path / args.raw) - - stamps = df.variables['time'] - - args.date = base.parse_date(args.date) - - if args.date: - stamps = stamp_filter(stamps, args.date) - - values = df.variables[args.value] - - path = path / args.value - - if args.pc: - pca = pcs(stamps, values, 48*35) - - pca.show_fracs(0.1) - - for x in dir(pca): - print(x) - - elif args.delta: - delta(stamps, values) - - elif args.model: - - model(stamps, values) - - else: - images(path, stamps, values) - - -if __name__ == '__main__': - animal = farm.Farm() - # animal.add(???) - animal.run() + rapanui = RapaNui() + rapanui.update(args) + rapanui.ahu = AHU + animal.add(rapanui) + animal.shep.path.append(rapanui) + + farm.run(animal) From 433841a409659ddb54ae28da0577962334c3d9cc Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 20 Jan 2021 13:37:41 -0500 Subject: [PATCH 602/642] more moon moai --- karmapi/moon.py | 47 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/karmapi/moon.py b/karmapi/moon.py index d06247c..68dff85 100644 --- a/karmapi/moon.py +++ b/karmapi/moon.py @@ -135,17 +135,38 @@ async def start(self): spell = magic.Spell() spell.find_casts(records) self.moai = list(spell.spell(records)) - - - async def run(self): - data = self.dem['Band1'][::-1] - extent = ( + self.extent = ( self.dem.geospatial_lon_min, self.dem.geospatial_lon_max, self.dem.geospatial_lat_min, self.dem.geospatial_lat_max) - + + + def zoomit(self, data): + + if self.zoom <= 1.: + return data, self.extent + + width, height = data.shape + ww = int(width // self.zoom) + hh = int(height // self.zoom) + wstart = (width - ww) // 2 + hstart = (height - hh) // 2 + lats, lons = self.dem['lat'], self.dem['lon'] + extent = (lons[hstart], lons[hstart + hh-1], + lats[wstart], lats[wstart + ww-1]) + extent = [float(x) for x in extent] + + return data[wstart:wstart+ww, hstart:hstart+hh], extent + + async def run(self): + + data = self.dem['Band1'] + + zdata, extent = self.zoomit(data) + zdata = zdata[::-1] + plt.imshow( - data, extent=extent, vmin=self.vmin, vmax=self.vmax, + zdata, extent=extent, vmin=self.vmin, vmax=self.vmax, cmap=magic.random_colour()) #plt.imshow(data, extent=extent) @@ -153,9 +174,11 @@ async def run(self): lats = [x['lat'] for x in self.moai] lons = [x['lon'] for x in self.moai] - plt.scatter(lons, lats) + plt.scatter(lons, lats, s=1) - # add ahu? + plt.scatter([ahu.x for ahu in self.ahu.values()], + [ahu.y for ahu in self.ahu.values()], + s=1, c='r') await self.put() @@ -185,12 +208,14 @@ async def run(self): ORIGIN=AHU['orongo'] parser.add_argument('-moai', default='moai.csv') - parser.add_argument('-vmin', default=-4000) - parser.add_argument('-vmax', default=500) + parser.add_argument('-vmin', type=float, default=-4000) + parser.add_argument('-vmax', type=float, default=500) + parser.add_argument('-zoom', type=float, default=2.0) parser.add_argument('-dem', default='easter_island_3_isl_2016.nc') args = parser.parse_args() + #magic.modes.rotate() animal = farm.Farm() rapanui = RapaNui() From 8e0e3e7d16e19e8f9dc4500a2001bd44c95604f0 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 20 May 2021 18:45:24 -0400 Subject: [PATCH 603/642] old ideas --- karmapi/moon.py | 63 ++++++++++++++++++++++++++++++++++------------ karmapi/pigfarm.py | 1 + 2 files changed, 48 insertions(+), 16 deletions(-) diff --git a/karmapi/moon.py b/karmapi/moon.py index 68dff85..a5750c1 100644 --- a/karmapi/moon.py +++ b/karmapi/moon.py @@ -124,13 +124,15 @@ def data_to_rows(data): -class RapaNui(magic.Ball): +class RongoRongo(magic.Ball): async def start(self): - print('Starting Rapa Nui') + print('Rapa Nui') self.dem = netCDF4.Dataset(self.dem) + # this should just be: self.moai = magic.Spell(open(self.moai)) + # just need an init method for spell records = list(data_to_rows(open(self.moai).readlines())) spell = magic.Spell() spell.find_casts(records) @@ -139,6 +141,9 @@ async def start(self): self.extent = ( self.dem.geospatial_lon_min, self.dem.geospatial_lon_max, self.dem.geospatial_lat_min, self.dem.geospatial_lat_max) + + print(self.dem) + print(self.extent) def zoomit(self, data): @@ -149,9 +154,13 @@ def zoomit(self, data): width, height = data.shape ww = int(width // self.zoom) hh = int(height // self.zoom) - wstart = (width - ww) // 2 - hstart = (height - hh) // 2 + + xoff, yoff = self.xoff, self.yoff + + wstart = int((xoff + width - ww) // 2) + hstart = int((yoff + height - hh) // 2) lats, lons = self.dem['lat'], self.dem['lon'] + extent = (lons[hstart], lons[hstart + hh-1], lats[wstart], lats[wstart + ww-1]) extent = [float(x) for x in extent] @@ -167,21 +176,36 @@ async def run(self): plt.imshow( zdata, extent=extent, vmin=self.vmin, vmax=self.vmax, + interpolation=self.interpolation[0], cmap=magic.random_colour()) #plt.imshow(data, extent=extent) plt.colorbar() - lats = [x['lat'] for x in self.moai] - lons = [x['lon'] for x in self.moai] - plt.scatter(lons, lats, s=1) + moai = select_moai(self.moai, extent) + lats = [x['lat'] for x in moai] + lons = [x['lon'] for x in moai] + plt.scatter(lons, lats, s=.1, c='r') - plt.scatter([ahu.x for ahu in self.ahu.values()], - [ahu.y for ahu in self.ahu.values()], - s=1, c='r') + #plt.scatter([ahu.x for ahu in self.ahu.values()], + # [ahu.y for ahu in self.ahu.values()], + # s=1, c='r') await self.put() +def select_moai(moai, extent): + + minlon, maxlon, minlat, maxlat = extent + + result = [] + for mo in moai: + lat, lon = mo['lat'], mo['lon'] + + if minlon <= lon and lon <= maxlon and minlat <= lat and lat <= maxlat: + result.append(mo) + return result + + if __name__ == '__main__': import argparse @@ -210,18 +234,25 @@ async def run(self): parser.add_argument('-moai', default='moai.csv') parser.add_argument('-vmin', type=float, default=-4000) parser.add_argument('-vmax', type=float, default=500) + parser.add_argument('-xoff', type=float, default=0.0) + parser.add_argument('-yoff', type=float, default=0.0) parser.add_argument('-zoom', type=float, default=2.0) parser.add_argument('-dem', default='easter_island_3_isl_2016.nc') args = parser.parse_args() - #magic.modes.rotate() + magic.modes.rotate() animal = farm.Farm() - rapanui = RapaNui() - rapanui.update(args) - rapanui.ahu = AHU - animal.add(rapanui) - animal.shep.path.append(rapanui) + rongo = RongoRongo() + rongo.update(args) + rongo.ahu = AHU + rongo.interpolation = deque([ + None, 'none', 'nearest', 'bilinear', 'bicubic', 'spline16', + 'spline36', 'hanning', 'hamming', 'hermite', 'kaiser', 'quadric', + 'catrom', 'gaussian', 'bessel', 'mitchell', 'sinc', 'lanczos']) + + animal.add(rongo) + animal.shep.path.append(rongo) farm.run(animal) diff --git a/karmapi/pigfarm.py b/karmapi/pigfarm.py index e72592e..9d4f11e 100644 --- a/karmapi/pigfarm.py +++ b/karmapi/pigfarm.py @@ -737,6 +737,7 @@ def draw_plot(self): if self.subtract_means: plot_frame = frame - mean plot_frame /= frame.std() + plot_frame = plot_frame.clip(-3, 3) else: plot_frame = frame From c39a9e45098b562dabdd1ed700d9b7895eef49f9 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 13 Aug 2021 20:44:08 -0400 Subject: [PATCH 604/642] more transport mutterings --- docs/transport.rst | 48 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/docs/transport.rst b/docs/transport.rst index de0a348..e13e794 100644 --- a/docs/transport.rst +++ b/docs/transport.rst @@ -154,7 +154,53 @@ opportunity to experiment with a contrarian approach to see just how good the transport can be. Over the summer efforts focussed on active transport. Many cities -have seen a boom in cycling, in particular. +have seen a boom in cycling, in particular, there has been spectacular +change in many European cities, Paris being a very notable example. + +In Ottawa there have been significant efforts by the National Capital +Commission to make safe outdoor space available. + +There have been glimpses of what the city might be with a little +imagination. + +*Menard Laning* is a thing. This is the practice of building +temporary pop-up bike lanes courtesy of a local counciller buying a +few hundred traffic cones. + +It is disappointing that the city did not do more to encourage +more experiments during this period when traffic was dramatically +reduced. + +There are challenges in Ottawa, with severe winters and hot humid +summer days. The range of temperatures under which equipment has to +operate is some 80 degrees centigrade. A range which is likely to +increase as the planet warms. + +To compensate for this variation, the good news is that the short +range weather forecasts are generally very good. By short range, I +mean 1-3 days. Beyond that there is also a good general indication +of what the next 10 days will be like. + +Through the recent crisis we have learnt that much of society can +adjust to work in a new environment. + +As the climate changes the impacts on events such as Winterlude could +be significant. + +Rather than focus on a fixed time each year, it would make sense to +introduce events as certain milestones are reached each season. + +* the opening of the first stretch of the canal. +* the first un-interrupted 3km stretch +* Dow's lake open + +Arrange events for the opening. + +Use the forecast to predict likely schedule for the next week, adjust +as necessary. + +After heavy snow, close certain roads to traffic, build ski trails. + From 1be80321d4a34551dbee5bcf38a307ecb8ac5a44 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 28 Sep 2021 21:39:14 -0400 Subject: [PATCH 605/642] await sleep --- karmapi/veyes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karmapi/veyes.py b/karmapi/veyes.py index 0819204..30dac5e 100644 --- a/karmapi/veyes.py +++ b/karmapi/veyes.py @@ -74,7 +74,7 @@ async def capture(args): camera = PiCamera() camera.start_preview() - curio.sleep(2) + await curio.sleep(2) last = None while True: From dd07883dab5897cf039c67570de6f638cff2575e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 29 Sep 2021 16:35:03 -0400 Subject: [PATCH 606/642] temporary hat hack for kitty cam --- karmapi/eric.py | 2 +- karmapi/hat.py | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/karmapi/eric.py b/karmapi/eric.py index 4c0b51a..65cc3d7 100644 --- a/karmapi/eric.py +++ b/karmapi/eric.py @@ -85,7 +85,7 @@ async def run(self): async def start(self): if self.farm.current: - self.filename = instpect.getsourcefile(self.farm.current) + self.filename = inspect.getsourcefile(self.farm.current) diff --git a/karmapi/hat.py b/karmapi/hat.py index c9b2764..38ee54e 100644 --- a/karmapi/hat.py +++ b/karmapi/hat.py @@ -2,7 +2,7 @@ import random import datetime import sense_hat - +import time class HatInfo: @@ -13,6 +13,10 @@ def __init__(self): self.hat.rotation = 90 + self.colour = (220, 100, 100) + + self.stats = False + def whattimeisit(self): return f'{datetime.datetime.now():%H:%M}' @@ -22,6 +26,11 @@ def run(self): h = self.hat while True: + if not self.stats: + self.hat.set_pixels([self.colour] * 64) + + time.sleep(2) + messages = [ f'T: {h.temp:0.1f}', f'P: {h.pressure:0.1f}', From 39b4f1df113f07f95fda8785578a81a445aa9832 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 29 Sep 2021 16:42:16 -0400 Subject: [PATCH 607/642] hat hackfest continues --- karmapi/hat.py | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/karmapi/hat.py b/karmapi/hat.py index 38ee54e..514047b 100644 --- a/karmapi/hat.py +++ b/karmapi/hat.py @@ -26,30 +26,32 @@ def run(self): h = self.hat while True: - if not self.stats: + if self.stats: + + messages = [ + f'T: {h.temp:0.1f}', + f'P: {h.pressure:0.1f}', + f'H: {h.humidity:0.1f}', + f'TT: {self.whattimeisit()}'] + + colours = [ + [255, 255, 0], + [255, 0, 255], + [0, 255, 255], + [255, 255, 255], + ] + + + for message, colour in zip(messages, colours): + + h.show_message(message, text_colour=colour, + scroll_speed=0.2) + + else: self.hat.set_pixels([self.colour] * 64) time.sleep(2) - - messages = [ - f'T: {h.temp:0.1f}', - f'P: {h.pressure:0.1f}', - f'H: {h.humidity:0.1f}', - f'TT: {self.whattimeisit()}'] - - colours = [ - [255, 255, 0], - [255, 0, 255], - [0, 255, 255], - [255, 255, 255], - ] - - - for message, colour in zip(messages, colours): - - h.show_message(message, text_colour=colour, - scroll_speed=0.2) - + continue if __name__ == '__main__': From 3928c4f60da093633e5578abcf85f8e1b60f496c Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 29 Sep 2021 19:36:47 -0400 Subject: [PATCH 608/642] long exposure veyes fix? --- karmapi/veyes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karmapi/veyes.py b/karmapi/veyes.py index 30dac5e..2f0f720 100644 --- a/karmapi/veyes.py +++ b/karmapi/veyes.py @@ -33,7 +33,7 @@ def long_exposure(length=6, # speed to 6s and ISO to 800 camera = PiCamera(resolution=resolution, framerate=Fraction(1, framerate)) camera.shutter_speed = length * 1000000 - camera.iso = 800 + camera.framerate = 1 / camera.shutter_speed camera.exposure_mode = 'off' From 9c2f1f344ccf5b08cd324c11a71ed288a661670d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 29 Sep 2021 19:42:24 -0400 Subject: [PATCH 609/642] long exposure veyes fix2? --- karmapi/veyes.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/karmapi/veyes.py b/karmapi/veyes.py index 2f0f720..0889d09 100644 --- a/karmapi/veyes.py +++ b/karmapi/veyes.py @@ -32,10 +32,8 @@ def long_exposure(length=6, # Set a framerate of 1/6fps, then set shutter # speed to 6s and ISO to 800 camera = PiCamera(resolution=resolution, framerate=Fraction(1, framerate)) - camera.shutter_speed = length * 1000000 - camera.framerate = 1 / camera.shutter_speed - - camera.exposure_mode = 'off' + camera.shutter_speed = framerate * 1000000 + #camera.exposure_mode = 'off' # return a camera object return camera From 40423ca5bdfadcb3060b571ba9c2f76ae1ae7cb2 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 30 Sep 2021 14:22:15 -0400 Subject: [PATCH 610/642] hat a little darker --- karmapi/hat.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karmapi/hat.py b/karmapi/hat.py index 514047b..c823e3b 100644 --- a/karmapi/hat.py +++ b/karmapi/hat.py @@ -13,7 +13,7 @@ def __init__(self): self.hat.rotation = 90 - self.colour = (220, 100, 100) + self.colour = (170, 80, 80) self.stats = False From d4dfbea0adb77e8cacc0de2e07ed3f3142d456e7 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 30 Sep 2021 21:01:55 -0400 Subject: [PATCH 611/642] tankrain now runs with blume, much rejoicing --- karmapi/tankrain.py | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index fda21b6..40b0e5c 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -38,6 +38,9 @@ from karmapi import show, base, cpr from karmapi import pigfarm, checksum +from blume import magic, farm + +from matplotlib import figure # Paths to data url = 'http://weather.bm/images/' @@ -51,11 +54,13 @@ target = 'tankrain/{date.year}/{date.month}/{date.day}/{name}_{date:%H%M}{suffix}' -class TankRain(pigfarm.Yard): +class TankRain(magic.Ball): """ Widget to show tankrain images """ - def __init__(self, parent, path=None, version='local', date=None, + def __init__(self, path=None, version='local', date=None, save=None, dedupe=0, *args): + + super().__init__() self.version = version self.dedupe = dedupe @@ -73,8 +78,6 @@ def __init__(self, parent, path=None, version='local', date=None, self.load_images() - super().__init__(parent, axes=[111]) - self.add_event_map('r', self.reverse) self.add_event_map(' ', self.pause) @@ -88,6 +91,10 @@ def __init__(self, parent, path=None, version='local', date=None, self.add_event_map('T', self.toggle_title) self.add_event_map('G', self.create_gif) + def add_event_map(self, key, coro): + + self.add_filter(key, coro) + def load_images(self): self.paths = [x for x in self.get_images()] @@ -386,20 +393,26 @@ async def run(self): title = f'{self.ix} : {len(self.paths)} {self.path}' self.compute_data() - #self.axes.clear() + + print('TITLE:', title) try: #self.axes.set_title(title, color=self.title) #self.axes.set_title(title, color=self.title or 'k') - self.draw_ball(self.ball) + #fig = figure.Figure() + #ax = fig.add_subplot() + #ax.imshow(self.data) + #ax.set_title(title) + #self.draw_ball(self.ball) + + await self.put(self.data) #self.axes.imshow(self.data) except OSError: print('dodgy image:', self.paths[self.ix]) #self.draw() - await curio.sleep(self.sleep) @@ -524,16 +537,15 @@ def main(args=None): args.date = base.parse_date(args.date) if args.pig: - farm = pigfarm.PigFarm() - farm.add( - TankRain, - dict(path=args.path, version=args.version, date=args.date, - save=args.save, dedupe=args.dedupe)) + frm = farm.Farm() + + tankrain = TankRain(path=args.path, version=args.version, date=args.date, + save=args.save, dedupe=args.dedupe) - from karmapi.mclock2 import GuidoClock - farm.add(GuidoClock) + frm.add(tankrain) + frm.shep.path.append(tankrain) + curio.run(farm.start_and_run(frm)) - pigfarm.run(farm) sys.exit() else: curio.run(fetch(args.minutes)) From 1a1ca05dd489e4d297364702b36f7646edac4e64 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 25 Nov 2021 14:46:06 -0500 Subject: [PATCH 612/642] revert reds --- docs/ottawa/revertreds.rst | 124 +++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 docs/ottawa/revertreds.rst diff --git a/docs/ottawa/revertreds.rst b/docs/ottawa/revertreds.rst new file mode 100644 index 0000000..af77add --- /dev/null +++ b/docs/ottawa/revertreds.rst @@ -0,0 +1,124 @@ +============= + Revert Reds +============= + +After a call to 311 the one at the end of my street seems to be +behaving a bit more predictably, which is good for me and others in +the area, but misses the heart of the problem. + +Current traffic policy leans towards keeping the cars flowing. Biking +about the city at present, it is startling how much space is given +over to cars and how much it impedes other means of travel. + +The current city traffic management is inconsistent with the city's +declaration of a climate emergency and statement in the official plan +that it desires to raise use of active transport and transit. + + +Cycling across town the other day, down Somerset St. It was a very +enjoyable ride, the streets were very quiet. + +There are many lights along the route, hardly two share the same +protocols: + +* pedestrians get head start + +* pedestrains and bikes both have their own symbols and get a head + start + +* some just have the one set of lights for all. + +have cycle lights and priority too. Each junction is a little +different, as we see how ideas have evolved through projects over +time. + +Adding revert reds to this mix of light protocols is inviting +problems. + +Returning to the quiet that also makes it safer and more enjoyable, +With the downtown quiet, the city is at a crossroads. How +to restore some vibrancy? + +The city and the government might want to consider turning some +offices into public work spaces. A place you can go to do your remote +work, meet others doing similar work. + +Business such as shopify, now remote working, have excellent office +spaces which would be excellent co-working spaces. + +Indeed Shopify is an interesting example, with its association with +open source software and communities. + +These communities have been collaborating on critical software bases +for over 30 years. Our entire IT infrastructure is built on open +source. And it was built through global collaboration facilitated by +the internet and tools the community built to support collaboration. + +One tool, in particular, is worth special mention, if only for the +name, *git*. + +The arrival of the pandemic and the work from home era has brought +this remote collaboration to large sectors of the work force, albeit +with *zoom* and shared drives, maybe even *git* for version control. + +The disruption has now been long enough that people have adapted to +the new normal and many rather like it. + +Organisations too have adapted too. I suspect the most successful +companies will be hybrid, with a decline in the demand for office space. + +How to re-vitalise the down town? + +Well let's return to open source communities. Whilst the work +focussed on sharing collaborative documents (the source code and +documentation for a project), regular conferences were a key part of +the successful projects. + +They gave opportunities for large numbers of individuals, typically +using some common tool to help them solve some other bigger problem. + +Actual meeting others wrestling with the same computation problems, +but in different ideas was an incredible incubator of ideas and +stimulator of collaboration. + +Working remotely and having opportunities to meet others dealing with +the same issues, but in different disciplines. + +Within the city offices, the federal government and other large +employers in the city and Gatineau, there is a lot of under-used +office space. + +How to get people to want to go and visit there? + +I have heard some mention of co-operative working spaces would be an +excellent way for people from different disciplines to share their +experiences, insights and visions for the future. + +In such work spaces it would be natural to have an extended working +day, so the facility will be in use for more hours of the day and +commuting will be more evenly spread through the day. + +As far as information technology is concerned, separation into public, +open projects versus internal private, projects would be hugely +beneficial. + +The open parts of government could be co-located with the co-working +spaces. Creating a unique opporunity to share ideas and increase +collaboration across the region. + +On the information technology side, the potential cost savings are +enormous. + +How are all these magical remote workers going to get to the city? + +If you can keep the traffic out of town there are many low cost +solutions to getting there. + +Reclaim some space from cars. Make the bike lanes where you don't +stop rolling until you get where you are going. + +Instead of wondering if the capacitance of your statusesque existence +is stable enough to turn a light red. + + + From 3a3567d0c107583e0452f060fa1d2e93815cd620 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 25 Nov 2021 21:12:36 -0500 Subject: [PATCH 613/642] revert reds city spaces --- docs/ottawa/revertreds.rst | 144 ++++++++++++++++++++++++------------- 1 file changed, 96 insertions(+), 48 deletions(-) diff --git a/docs/ottawa/revertreds.rst b/docs/ottawa/revertreds.rst index af77add..b9160f9 100644 --- a/docs/ottawa/revertreds.rst +++ b/docs/ottawa/revertreds.rst @@ -14,37 +14,42 @@ The current city traffic management is inconsistent with the city's declaration of a climate emergency and statement in the official plan that it desires to raise use of active transport and transit. - Cycling across town the other day, down Somerset St. It was a very enjoyable ride, the streets were very quiet. There are many lights along the route, hardly two share the same -protocols: +protocols. -* pedestrians get head start +Pedestrians get head start, but not bikes. -* pedestrains and bikes both have their own symbols and get a head - start +Pedestrains and bikes both have their own symbols and get a head +start. + +Plain old traffic light, pedestrian light just flashes, no counter. -* some just have the one set of lights for all. +Traffic like with pedestrian countdown. -have cycle lights and priority too. Each junction is a little -different, as we see how ideas have evolved through projects over -time. +Each junction is a little different, as we see how ideas have evolved +through projects over time. Adding revert reds to this mix of light protocols is inviting problems. -Returning to the quiet that also makes it safer and more enjoyable, -With the downtown quiet, the city is at a crossroads. How +But overall, with current low traffic everything felt safe and +enjoyable. + +The downtown is quiet, too quiet, the city is at a crossroads. How to restore some vibrancy? + + + The city and the government might want to consider turning some offices into public work spaces. A place you can go to do your remote work, meet others doing similar work. -Business such as shopify, now remote working, have excellent office -spaces which would be excellent co-working spaces. +Business such as Shopify, now fully remote working, have excellent +office spaces which would be excellent co-working spaces. Indeed Shopify is an interesting example, with its association with open source software and communities. @@ -55,70 +60,113 @@ source. And it was built through global collaboration facilitated by the internet and tools the community built to support collaboration. One tool, in particular, is worth special mention, if only for the -name, *git*. +name, *git*, but that is likely another story. The arrival of the pandemic and the work from home era has brought -this remote collaboration to large sectors of the work force, albeit -with *zoom* and shared drives, maybe even *git* for version control. +this remote collaboration to large sectors of the population, albeit +with *zoom* and shared drives, cameras and mics. + +Maybe even *git* for version control, more likely Dropbox, Drives or +whatever shared filespace is called these days. The disruption has now been long enough that people have adapted to the new normal and many rather like it. Organisations too have adapted too. I suspect the most successful -companies will be hybrid, with a decline in the demand for office space. +companies will be hybrid, with a decline in the demand for office +space. -How to re-vitalise the down town? +I would also expect that this time has very much changed how many +organisations run, as people adapt to varying degrees and this changes +dynamics within an organisation. -Well let's return to open source communities. Whilst the work -focussed on sharing collaborative documents (the source code and -documentation for a project), regular conferences were a key part of -the successful projects. +Many were no doubt much more comfortable with the old world and are +hoping to a return. In general, those exercising power and control +in organisations pre-pandemic may well have experienced significant +loss of control during all the change. -They gave opportunities for large numbers of individuals, typically -using some common tool to help them solve some other bigger problem. +It is natural there will be many strong advocates for a return to +office commute. -Actual meeting others wrestling with the same computation problems, -but in different ideas was an incredible incubator of ideas and -stimulator of collaboration. +How to resolve all this and re-vitalise the down town? -Working remotely and having opportunities to meet others dealing with -the same issues, but in different disciplines. +Well let's return to open source communities. Whilst most +collaboration was done entirely on line, regular conferences were a +key part of the successful projects. + +They gave opportunities for large numbers of individuals, typically +using some common tool to help them solve some other bigger problem, +to meet others wrestling with the same computation problems. -Within the city offices, the federal government and other large -employers in the city and Gatineau, there is a lot of under-used -office space. +People from a wide variety of fields, gathering to share ideas was an +incredible incubator of ideas and stimulator of collaboration. -How to get people to want to go and visit there? +Working remotely can be very isolating, it was hard to find people +locally doing the same things. Online communities turned into meetups +and mini conferences. -I have heard some mention of co-operative working spaces would be an -excellent way for people from different disciplines to share their -experiences, insights and visions for the future. +Back to the city, how to get people to want to go and visit there? + +The key is surely to create spaces where people want to go because of +the others they will find there. In such work spaces it would be natural to have an extended working day, so the facility will be in use for more hours of the day and commuting will be more evenly spread through the day. -As far as information technology is concerned, separation into public, -open projects versus internal private, projects would be hugely -beneficial. +As far as information technology is concerned, separation of civic +prigects into public, open projects versus internal private, projects +would be hugely beneficial. The open parts of government could be co-located with the co-working spaces. Creating a unique opporunity to share ideas and increase -collaboration across the region. +collaboration across the region, and share knowledge with each other. + +For example, a space where those interested in the city's open data +portals can gather, and have those in the city working on the same +spend some time each week in the same space. + +The city could allocate some of its spare office space to groups +interested in problems, such as the software controlling our traffic +lights. + +How will all people to get to the city? + +No-one is going to go there unless it is cheap, easy, fast and fun to +move around. But imagine there is a whole variety of spaces you can +choosed to go to work remotely for a while. Not Jamaica, but rather +the old city offices where nobody wants to go. -On the information technology side, the potential cost savings are -enormous. +We have just gone through the publishing of an official plan and it is +notably lacking of any evidence that any alternative futures have been +given proper consideration and evaluation. This in light of +everything we have learnt through the pandemic. -How are all these magical remote workers going to get to the city? +Surely the city should be looking at some radically different visions +for transport and land use across the city? -If you can keep the traffic out of town there are many low cost -solutions to getting there. +There are no ends of projects where increased public contribution +would be invaluable. -Reclaim some space from cars. Make the bike lanes where you don't -stop rolling until you get where you are going. +Open up the planning department, organise regular lunch-and-learns +in the new shared space. Truly, move to and being an open +organisation, designed as a place where the default is open to all. + +Create spaces where people can share there experiences during the +pandemic, how their outlook on the world may have changed and new +visions for the future. + +Planes where people can ask, what could we do if we reclaim some space from cars? + +Create the bike lanes where you don't stop rolling until you get where +you are going, pathways just merge and flow. Instead of wondering if the capacitance of your statusesque existence -is stable enough to turn a light red. +is stable enough to turn a light red as you wait for the inevitable +revert. + +We can't make a car stop, we can't afford to burn the extra oil a few +stops might cause. From 26b797c166b305c8e9f09e8300ed16d1d8b7e6c4 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 25 Nov 2021 21:21:58 -0500 Subject: [PATCH 614/642] revert reds city spaces random ramblings --- docs/ottawa/revertreds.rst | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/docs/ottawa/revertreds.rst b/docs/ottawa/revertreds.rst index b9160f9..550cfb1 100644 --- a/docs/ottawa/revertreds.rst +++ b/docs/ottawa/revertreds.rst @@ -74,11 +74,11 @@ the new normal and many rather like it. Organisations too have adapted too. I suspect the most successful companies will be hybrid, with a decline in the demand for office -space. +space. But many will need a large space for occasional gatherings. -I would also expect that this time has very much changed how many -organisations run, as people adapt to varying degrees and this changes -dynamics within an organisation. +I would also expect that the move to remote has very much changed how +many organisations run, as people adapt to varying degrees and this +changes dynamics within an organisation. Many were no doubt much more comfortable with the old world and are hoping to a return. In general, those exercising power and control @@ -108,7 +108,9 @@ and mini conferences. Back to the city, how to get people to want to go and visit there? The key is surely to create spaces where people want to go because of -the others they will find there. +the others they will find there. Whilst few want to spend 40 hours a +week plus 10 hours commuting, many would be happy with a couple of +afternoons, mornings or evenings a week. In such work spaces it would be natural to have an extended working day, so the facility will be in use for more hours of the day and @@ -130,12 +132,9 @@ The city could allocate some of its spare office space to groups interested in problems, such as the software controlling our traffic lights. -How will all people to get to the city? - -No-one is going to go there unless it is cheap, easy, fast and fun to -move around. But imagine there is a whole variety of spaces you can -choosed to go to work remotely for a while. Not Jamaica, but rather -the old city offices where nobody wants to go. +Imagine there is a whole variety of spaces you can choosed to go to +work remotely for a while. Not Jamaica, but rather the old city +offices where nobody wants to go. We have just gone through the publishing of an official plan and it is notably lacking of any evidence that any alternative futures have been @@ -152,11 +151,15 @@ Open up the planning department, organise regular lunch-and-learns in the new shared space. Truly, move to and being an open organisation, designed as a place where the default is open to all. +Stop out-sourcing everything to consultants, rather build internal +expertise and collaboration across different local communities. + Create spaces where people can share there experiences during the pandemic, how their outlook on the world may have changed and new visions for the future. -Planes where people can ask, what could we do if we reclaim some space from cars? +Places where people can ask, what could we do if we reclaim some space +from cars? Create the bike lanes where you don't stop rolling until you get where you are going, pathways just merge and flow. @@ -165,8 +168,8 @@ Instead of wondering if the capacitance of your statusesque existence is stable enough to turn a light red as you wait for the inevitable revert. -We can't make a car stop, we can't afford to burn the extra oil a few -stops might cause. + + From 5ea6f57c6ef2e8fae5328ce9a579ea9de96f704d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Thu, 17 Mar 2022 20:30:49 -0400 Subject: [PATCH 615/642] fix tankrain for latest blume --- karmapi/tankrain.py | 56 ++++++++++++++++++++++----------------------- 1 file changed, 27 insertions(+), 29 deletions(-) diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index 40b0e5c..ffc12af 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -35,9 +35,8 @@ import curio -from karmapi import show, base, cpr +from karmapi import base, cpr -from karmapi import pigfarm, checksum from blume import magic, farm from matplotlib import figure @@ -64,7 +63,6 @@ def __init__(self, path=None, version='local', date=None, self.version = version self.dedupe = dedupe - self.paused = False self.path = path or '.' self.save_folder = save self.timewarp = 0 @@ -79,7 +77,6 @@ def __init__(self, path=None, version='local', date=None, self.load_images() self.add_event_map('r', self.reverse) - self.add_event_map(' ', self.pause) self.add_event_map('b', self.previous_day) self.add_event_map('v', self.next_day) @@ -382,38 +379,39 @@ async def run(self): #await pigfarm.aside(runfetch) #self.dark() - while True: - if self.paused: - await curio.sleep(self.sleep) - continue - - if self.paths: - title = self.paths[self.ix] - else: - title = f'{self.ix} : {len(self.paths)} {self.path}' + if self.paths: + title = self.paths[self.ix] + else: + title = f'{self.ix} : {len(self.paths)} {self.path}' - self.compute_data() + self.compute_data() - print('TITLE:', title) - try: - #self.axes.set_title(title, color=self.title) - #self.axes.set_title(title, color=self.title or 'k') + print('TITLE:', title) + try: + #self.axes.set_title(title, color=self.title) + #self.axes.set_title(title, color=self.title or 'k') - #fig = figure.Figure() - #ax = fig.add_subplot() - #ax.imshow(self.data) - #ax.set_title(title) - #self.draw_ball(self.ball) + #fig = figure.Figure() + #ax = fig.add_subplot() + #ax.imshow(self.data) + #ax.set_title(title) + #self.draw_ball(self.ball) - await self.put(self.data) - #self.axes.imshow(self.data) - except OSError: - print('dodgy image:', self.paths[self.ix]) + print(type(self.data)) + #await self.put(self.data) + ax = await self.get() + print('sps', ax.get_subplotspec()) + print('margins', ax.margins()) + print('pos', ax.get_position()) + ax.imshow(self.data) + # need to trigger an axes draw??? + ax.show() + #self.axes.imshow(self.data) + except OSError: + print('dodgy image:', self.paths[self.ix]) - #self.draw() - await curio.sleep(self.sleep) From 18ade2dfe8e227d26919f33ea7f2d558847a44af Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 12 Apr 2022 20:21:56 -0400 Subject: [PATCH 616/642] tankrain and sense in progress --- karmapi/sense.py | 16 ++++++---------- karmapi/tankrain.py | 26 +------------------------- 2 files changed, 7 insertions(+), 35 deletions(-) diff --git a/karmapi/sense.py b/karmapi/sense.py index 73ead98..e859cb4 100644 --- a/karmapi/sense.py +++ b/karmapi/sense.py @@ -35,13 +35,9 @@ from karmapi import pigfarm, base try: - import sense_hat + import pisense except: - # see if sense hat emulator is around - try: - import sense_emu as sense_hat - except: - print('No sense hat libraries') + print('No sense hat libraries') def stats(hat): @@ -69,8 +65,8 @@ def get_weather(hat): while True: data = dict( - humidity = hat.humidity, - pressure = hat.pressure, + humidity = hat.environ.humidity, + pressure = hat.environ.pressure, temperature = ( hat.get_temperature_from_pressure() + @@ -236,7 +232,7 @@ async def record(path='.', sleep=1, tasks=None, names=None, hat=None): """ Record everything from the hat """ if hat is None: - hat = sense_hat.SenseHat() + hat = pisense.SenseHAT() weather = get_weather compass = get_compass @@ -440,7 +436,7 @@ def main(): farm = pigfarm.PigFarm() - hat = sense_hat.SenseHat() + hat = pisense.SenseHAT() farm.add(WeatherHat) farm.add(OrientHat) diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index ffc12af..607e2d8 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -22,7 +22,7 @@ import random import sys import numpy as np -from PIL import Image, ImageTk +from PIL import Image import datetime @@ -348,30 +348,6 @@ async def toggle_title(self): else: self.title = 'k' - async def start(self): - """ FIXME: get yosser to run? """ - #farm.yosser.run(fetch, minutes=20, sleep=300) - - pass - - def draw_ball(self, ball): - """ wc has everything???? - - feels like I have written this bit 20 times - """ - width, height = self.width, self.height - - image = ball.project('', quantise=False) - print('xxxxxxxxxx', type(image), image.shape) - image = Image.fromarray(image) - image = image.resize((int(width), int(height))) - - self.phim = phim = ImageTk.PhotoImage(image) - - xx = int(width / 2) - yy = int(height / 2) - self.canvas.create_image(xx, yy, image=phim) - async def run(self): From 83e7affd3a730fa8d74388f6e7b859bd3b06a931 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Tue, 12 Apr 2022 20:43:58 -0400 Subject: [PATCH 617/642] more tankrain fixes --- karmapi/tankrain.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index 607e2d8..0197425 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -35,7 +35,7 @@ import curio -from karmapi import base, cpr +from karmapi import base from blume import magic, farm @@ -134,18 +134,12 @@ def _compute_data(self): if ix < len(self.paths): im = Image.open(self.paths[ix]) - ball = cpr.Sphere(im.size) - - ball.rgb = np.array(im) - print('brs', ball.rgb.shape) else: # FIXME -- create an image that shows there is no data # for now, lets just show a rainbow rainbow = [x for x in range(100)] im = np.array([rainbow] * 100, dtype=np.uint8) im.resize((100, 100)) - ball = cpr.Sphere(im.shape) - ball.rgb = im n = len(self.paths) ix = ix + self.inc @@ -156,7 +150,6 @@ def _compute_data(self): self.ix = ix print('ixixixi', ix, self.ix, n, self.inc) - self.ball = ball self.data = im def tonp(self, data): From 799bec0e1424c78ea1c1971f871e6dcfacbb1464 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 13 Apr 2022 15:35:56 -0400 Subject: [PATCH 618/642] start veyes hack to use libcamera --- karmapi/veyes.py | 67 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 64 insertions(+), 3 deletions(-) diff --git a/karmapi/veyes.py b/karmapi/veyes.py index 0889d09..f688323 100644 --- a/karmapi/veyes.py +++ b/karmapi/veyes.py @@ -8,15 +8,68 @@ from io import BytesIO -from picamera import PiCamera import time import curio from PIL import Image +from blume import farm, magic, Ball -from fractions import Fraction +class PiCamera(Ball): + """ The new kid in town is libcamera-still + + It does everything I need, except... + + So the plan here is to just call libcamera-still with a bunch of options + and see how it goes. + """ + def __init__(self): + + super().__init__() + + self.timestamp = False + self.datetime = True + self.latest = 'latest.jpg' + self.shutter = 0 + self.nopreview = 1 + self.output = 'preview.jpg' + + + def make_cmd(self): + + cmd = ['libcamera-still'] + + for flag in ['timestamp', 'datetime', 'preview']: + if getattr(self, flag): + cmd.append('--' + flag) + + if self.shutter: + cmd.append(f'--shutter {self.shutter}') + + if self.output: + cmd.append(f'--output {self.output}') + + if self.nopreview: + cmd.append(f'--nopreview') + + + async def run(self): + """ Make one call to libcamera""" + + subprocess.run(self.make_cmd()) + + image = Image.open(self.output) + + ax = await self.get() + + ax.imshow(image) + + ax.show() + + + +from fractions import Fraction def long_exposure(length=6, framerate=6, @@ -98,7 +151,7 @@ async def capture(args): camera = random_picture(camera) -def main(): +def xmain(): parser = argparse.ArgumentParser() parser.add_argument('--sleep', type=float, default=60) @@ -111,6 +164,14 @@ def main(): curio.run(capture(args)) +def main(): + + fm = farm.Farm() + + camera = PiCamera() + fm.add(camera) + fm.shep.path.append(camera) + farm.run(fm) if __name__ == '__main__': From 3a05da71f4cc57f330647f92a0604160fa37e72e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 13 Apr 2022 15:37:17 -0400 Subject: [PATCH 619/642] import confusion --- karmapi/veyes.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/karmapi/veyes.py b/karmapi/veyes.py index f688323..947036e 100644 --- a/karmapi/veyes.py +++ b/karmapi/veyes.py @@ -13,10 +13,10 @@ from PIL import Image -from blume import farm, magic, Ball +from blume import farm, magic -class PiCamera(Ball): +class PiCamera(magic.Ball): """ The new kid in town is libcamera-still It does everything I need, except... From ff73ba92cc24c0856ecfb2bace48ca89c65bc114 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 13 Apr 2022 15:38:55 -0400 Subject: [PATCH 620/642] more import confusion --- karmapi/veyes.py | 1 + 1 file changed, 1 insertion(+) diff --git a/karmapi/veyes.py b/karmapi/veyes.py index 947036e..60c88cd 100644 --- a/karmapi/veyes.py +++ b/karmapi/veyes.py @@ -5,6 +5,7 @@ import datetime from pathlib import Path import random +import subprocess from io import BytesIO From b76e55c71060844281c685b0f80eba829125fe99 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 13 Apr 2022 15:41:34 -0400 Subject: [PATCH 621/642] nopreview not preview --- karmapi/veyes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karmapi/veyes.py b/karmapi/veyes.py index 60c88cd..c4aa77c 100644 --- a/karmapi/veyes.py +++ b/karmapi/veyes.py @@ -41,7 +41,7 @@ def make_cmd(self): cmd = ['libcamera-still'] - for flag in ['timestamp', 'datetime', 'preview']: + for flag in ['timestamp', 'datetime', 'nopreview']: if getattr(self, flag): cmd.append('--' + flag) From ec66f9e634d2dfd124c4d46dafc106f321e24dd4 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 13 Apr 2022 15:43:57 -0400 Subject: [PATCH 622/642] str not list --- karmapi/veyes.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/karmapi/veyes.py b/karmapi/veyes.py index c4aa77c..ba31359 100644 --- a/karmapi/veyes.py +++ b/karmapi/veyes.py @@ -53,7 +53,8 @@ def make_cmd(self): if self.nopreview: cmd.append(f'--nopreview') - + + return ' '.join(cmd) async def run(self): """ Make one call to libcamera""" From e33c01659471794304992b305e0340bdcb58c964 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 13 Apr 2022 15:49:22 -0400 Subject: [PATCH 623/642] another go at subprocess cmd building --- karmapi/veyes.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/karmapi/veyes.py b/karmapi/veyes.py index ba31359..728c8bb 100644 --- a/karmapi/veyes.py +++ b/karmapi/veyes.py @@ -46,15 +46,17 @@ def make_cmd(self): cmd.append('--' + flag) if self.shutter: - cmd.append(f'--shutter {self.shutter}') + cmd.append('--shutter') + cmd.append(str(self.shutter)) if self.output: - cmd.append(f'--output {self.output}') + cmd.append('--output') + cmd.append(str(self.output)) if self.nopreview: cmd.append(f'--nopreview') - return ' '.join(cmd) + return cmd async def run(self): """ Make one call to libcamera""" From 1ead700e6f546e96f291da9932c7040e5754092a Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 13 Apr 2022 16:07:03 -0400 Subject: [PATCH 624/642] try and stop hang while running libcamera --- karmapi/veyes.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/karmapi/veyes.py b/karmapi/veyes.py index 728c8bb..48a9589 100644 --- a/karmapi/veyes.py +++ b/karmapi/veyes.py @@ -30,7 +30,7 @@ def __init__(self): super().__init__() self.timestamp = False - self.datetime = True + self.datetime = False self.latest = 'latest.jpg' self.shutter = 0 self.nopreview = 1 @@ -56,12 +56,15 @@ def make_cmd(self): if self.nopreview: cmd.append(f'--nopreview') - return cmd + subprocess.run(cmd) + async def run(self): """ Make one call to libcamera""" - subprocess.run(self.make_cmd()) + cmd = self.make_cmd() + + await curio.run_in_process(self.make_cmd()) image = Image.open(self.output) From 7e9a4445dc75bd45badea06fe06975611ff16e6e Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 13 Apr 2022 16:10:45 -0400 Subject: [PATCH 625/642] back to plain subprocess --- karmapi/veyes.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/karmapi/veyes.py b/karmapi/veyes.py index 48a9589..a051ef6 100644 --- a/karmapi/veyes.py +++ b/karmapi/veyes.py @@ -56,7 +56,6 @@ def make_cmd(self): if self.nopreview: cmd.append(f'--nopreview') - subprocess.run(cmd) async def run(self): @@ -64,7 +63,7 @@ async def run(self): cmd = self.make_cmd() - await curio.run_in_process(self.make_cmd()) + subprocess.run(cmd) image = Image.open(self.output) From d3f5e40d5da8f91feaa2d49e9f2d77ce53129592 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 13 Apr 2022 16:14:13 -0400 Subject: [PATCH 626/642] oops return the cmd --- karmapi/veyes.py | 1 + 1 file changed, 1 insertion(+) diff --git a/karmapi/veyes.py b/karmapi/veyes.py index a051ef6..a055da4 100644 --- a/karmapi/veyes.py +++ b/karmapi/veyes.py @@ -56,6 +56,7 @@ def make_cmd(self): if self.nopreview: cmd.append(f'--nopreview') + return cmd async def run(self): From 06414ee077759fb2822c2bf679f03eecb336b41d Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 13 Apr 2022 17:55:53 -0400 Subject: [PATCH 627/642] try qt-preview for veyes --- karmapi/veyes.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/karmapi/veyes.py b/karmapi/veyes.py index a055da4..fdc93e4 100644 --- a/karmapi/veyes.py +++ b/karmapi/veyes.py @@ -33,8 +33,9 @@ def __init__(self): self.datetime = False self.latest = 'latest.jpg' self.shutter = 0 - self.nopreview = 1 + self.qtpreview = 1 self.output = 'preview.jpg' + self.timelapse def make_cmd(self): @@ -53,8 +54,8 @@ def make_cmd(self): cmd.append('--output') cmd.append(str(self.output)) - if self.nopreview: - cmd.append(f'--nopreview') + if self.qtpreview: + cmd.append(f'--qt-preview') return cmd From 91074e77638d798214db14451f70089267cce7a8 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 13 Apr 2022 18:07:37 -0400 Subject: [PATCH 628/642] more veyes hacking --- karmapi/veyes.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/karmapi/veyes.py b/karmapi/veyes.py index fdc93e4..e5d703f 100644 --- a/karmapi/veyes.py +++ b/karmapi/veyes.py @@ -35,27 +35,27 @@ def __init__(self): self.shutter = 0 self.qtpreview = 1 self.output = 'preview.jpg' - self.timelapse + self.timelapse = 0 + self.timeout = 5000 def make_cmd(self): cmd = ['libcamera-still'] - for flag in ['timestamp', 'datetime', 'nopreview']: + for flag in ['timestamp', 'datetime', 'nopreview', 'qt-preview']: + value = getattr(self, key.replace('_', '')) + if getattr(self, flag): cmd.append('--' + flag) - - if self.shutter: - cmd.append('--shutter') - cmd.append(str(self.shutter)) - if self.output: - cmd.append('--output') - cmd.append(str(self.output)) + keys = ('shutter', 'output', 'timelapse', 'timeout') + for key in keys: - if self.qtpreview: - cmd.append(f'--qt-preview') + value = getattr(self, key.replace('_', '')) + if value: + cmd.append('--' + key) + cmd.append(str(value)) return cmd From 096e7501f6ced12d820b5e3a4614dcd4d4dda18b Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 13 Apr 2022 18:16:08 -0400 Subject: [PATCH 629/642] qt-preview pops up for veyes --- karmapi/veyes.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/karmapi/veyes.py b/karmapi/veyes.py index e5d703f..c9b6109 100644 --- a/karmapi/veyes.py +++ b/karmapi/veyes.py @@ -34,6 +34,7 @@ def __init__(self): self.latest = 'latest.jpg' self.shutter = 0 self.qtpreview = 1 + self.nopreview = 0 self.output = 'preview.jpg' self.timelapse = 0 self.timeout = 5000 @@ -43,16 +44,16 @@ def make_cmd(self): cmd = ['libcamera-still'] - for flag in ['timestamp', 'datetime', 'nopreview', 'qt-preview']: - value = getattr(self, key.replace('_', '')) + for key in ['timestamp', 'datetime', 'nopreview', 'qt-preview']: + value = getattr(self, key.replace('-', '')) - if getattr(self, flag): - cmd.append('--' + flag) + if value: + cmd.append('--' + key) keys = ('shutter', 'output', 'timelapse', 'timeout') for key in keys: - value = getattr(self, key.replace('_', '')) + value = getattr(self, key.replace('-', '')) if value: cmd.append('--' + key) cmd.append(str(value)) From 429f12620ad41d05fffae7e8443a5bff30c56479 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 15 Apr 2022 13:25:48 -0400 Subject: [PATCH 630/642] veyes tinkering --- karmapi/veyes.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/karmapi/veyes.py b/karmapi/veyes.py index c9b6109..d76f249 100644 --- a/karmapi/veyes.py +++ b/karmapi/veyes.py @@ -37,7 +37,7 @@ def __init__(self): self.nopreview = 0 self.output = 'preview.jpg' self.timelapse = 0 - self.timeout = 5000 + self.timeout = 50000 def make_cmd(self): @@ -68,7 +68,7 @@ async def run(self): subprocess.run(cmd) - image = Image.open(self.output) + image = Image.open(self.latest) ax = await self.get() From e3271c2d34145b1b890a893867002239b2e39cef Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 15 Apr 2022 13:29:57 -0400 Subject: [PATCH 631/642] veyes tinkering --- karmapi/veyes.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/karmapi/veyes.py b/karmapi/veyes.py index d76f249..9533127 100644 --- a/karmapi/veyes.py +++ b/karmapi/veyes.py @@ -30,13 +30,13 @@ def __init__(self): super().__init__() self.timestamp = False - self.datetime = False + self.datetime = True self.latest = 'latest.jpg' self.shutter = 0 self.qtpreview = 1 self.nopreview = 0 - self.output = 'preview.jpg' - self.timelapse = 0 + #self.output = 'preview.jpg' + self.timelapse = 10000 self.timeout = 50000 From b6e61ebeec4f64f4c50da8b1349d9c2a49d052e5 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Fri, 15 Apr 2022 13:31:00 -0400 Subject: [PATCH 632/642] veyes tinkering --- karmapi/veyes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karmapi/veyes.py b/karmapi/veyes.py index 9533127..3875725 100644 --- a/karmapi/veyes.py +++ b/karmapi/veyes.py @@ -50,7 +50,7 @@ def make_cmd(self): if value: cmd.append('--' + key) - keys = ('shutter', 'output', 'timelapse', 'timeout') + keys = ('shutter', 'timelapse', 'timeout') for key in keys: value = getattr(self, key.replace('-', '')) From 29e983889a5a71d667e75c6b7e94f9a3f68426cc Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 25 Apr 2022 16:45:55 -0400 Subject: [PATCH 633/642] breaking the cpr module --- karmapi/cpr.py | 88 +++++++++++++++++++++------------------------ karmapi/tankrain.py | 3 +- 2 files changed, 41 insertions(+), 50 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index b7cffe9..cb610cb 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -213,7 +213,7 @@ def __init__(self, size=None, # FIXME? #self.sleep = self.size[0] / 1000 self.sleep = self.size[0] / 100 - self.sleep=.01 + self.sleep=.5 self.reset(init=True) @@ -343,7 +343,7 @@ def lowhemi(self, pixels): return self.poleview(pixels, wind=-1) - async def run(self, elsewhere=True): + async def run(self, elsewhere=False): """Run the sphere Really want to just add to queue and let something else @@ -449,7 +449,7 @@ def tick(self): ygrid = list(range(n1)) #cbweight = lbweight = nbweight = 1 - print(self, 'weights', lbweight, cbweight, nbweight) + #print(self, 'weights', lbweight, cbweight, nbweight) nbc = lbc = (0., 0., 0.) @@ -695,6 +695,7 @@ def __init__(self, balls=None, fade=1, twist=True): self.view = 0 self.fade = fade self.twist = twist + self.spheres = [] # interesting -- already magic roundabout could help. self.build(balls) @@ -702,7 +703,7 @@ def __init__(self, balls=None, fade=1, twist=True): # event handling self.add_event_map(' ', self.pause) self.paused = False - self.add_event_map('r', self.reset) + self.add_event_map('o', self.reset) self.dball = 0 self.add_event_map('j', self.backward) @@ -720,7 +721,7 @@ def __init__(self, balls=None, fade=1, twist=True): def add_event_map(self, key, coro): - self.event_map[key] = coro + self.add_filter(key, coro) async def lessfade(self): @@ -778,7 +779,7 @@ async def reset(self): for ball in self.balls: ball.reset() - await self.start_balls_running() + await self.start() async def forward(self): """ Move to next sphere """ @@ -877,7 +878,7 @@ def draw(self): async def publish(self, ball): - width, height = self.width, self.height + width, height = self.size, self.size image = ball.project(self.views[self.view]) @@ -892,22 +893,24 @@ def draw_ball(self, ball): feels like I have written this bit 20 times """ - width, height = self.width, self.height - image = ball.project(self.views[self.view]) + print('DRAW_BALL', type(self)) + width, height = self.size, self.size + + image = ball.project(self.views[self.view]) + + #image = image[::, ::, 1] image = Image.fromarray(image) image = image.resize((int(width), int(height))) - - self.phim = phim = ImageTk.PhotoImage(image) + self.ax.imshow(image) - xx = int(self.width / 2) - yy = int(self.height / 2) - self.canvas.create_image(xx, yy, image=phim) - async def start_balls_running(self): + async def start(self): + return + spheres = [] for ball in self.balls: sphere = await curio.spawn(ball.run) @@ -923,39 +926,33 @@ async def cancel(self): await ball.cancel() - async def runner(self): + async def run(self): """ Run the waves """ - self.set_background() - - #await self.random_step_some() - - self.spheres - spheres = await self.start_balls_running() + #self.set_background() + print('RANDOM STEP TIME') + await self.random_step_some() + + spheres = self.spheres print('NESTED WAVES Running') - while True: - try: - if self.paused: - await curio.sleep(self.sleep) - continue - - self.canvas.delete('all') + try: + self.ax = await self.get() - self.draw() - print('ball drawn') - #await self.step_balls() - await curio.sleep(self.sleep) + self.draw() + self.ax.show() + print('ball drawn') + #await self.step_balls() - except curio.CancelledError: - print('cancelling balls from nested waves') - for ball in spheres: - print('cancelling', ball) - await ball.cancel() + except curio.CancelledError: + print('cancelling balls from nested waves') + for ball in spheres: + print('cancelling', ball) + await ball.cancel() - raise + raise def generate_spheres(sizes, clazz=None, mass=None, radii=None, @@ -1200,7 +1197,6 @@ def args_to_spheres(args): return spheres - async def run(args): # pass list of balls into NestedWaves @@ -1212,15 +1208,11 @@ async def run(args): balls=spheres, fade=args.fade, twist=args.twist) - clock = farm.GuidoClock() - land.add_edge(clock, land.carpet) - land.add_edge(waves, land.carpet) - + land.add(waves) + land.shep.path.append(waves) - starter = await curio.spawn(land.start()) + await farm.start_and_run(land) - print('farm runnnnnnnnnning') - runner = await land.run() def main(): @@ -1229,7 +1221,7 @@ def main(): args = parser.parse_args() - curio.run(run(args), with_monitor=True) + curio.run(run(args)) if __name__ == '__main__': diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index 0197425..ebb5a7e 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -76,7 +76,7 @@ def __init__(self, path=None, version='local', date=None, self.load_images() - self.add_event_map('r', self.reverse) + self.add_event_map('o', self.reverse) self.add_event_map('b', self.previous_day) self.add_event_map('v', self.next_day) @@ -84,7 +84,6 @@ def __init__(self, path=None, version='local', date=None, self.add_event_map('l', self.fewer_images) self.add_event_map('m', self.more_images) self.add_event_map('X', self.switcheroo) - self.add_event_map('S', self.save) self.add_event_map('T', self.toggle_title) self.add_event_map('G', self.create_gif) From 6bdce27083e2da461cc501c9b968144a48ee8ea0 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sun, 27 Nov 2022 17:27:31 -0500 Subject: [PATCH 634/642] veyes hacking for libcamera on pi --- karmapi/veyes.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/karmapi/veyes.py b/karmapi/veyes.py index 3875725..82dc272 100644 --- a/karmapi/veyes.py +++ b/karmapi/veyes.py @@ -32,12 +32,13 @@ def __init__(self): self.timestamp = False self.datetime = True self.latest = 'latest.jpg' - self.shutter = 0 - self.qtpreview = 1 - self.nopreview = 0 + self.shutter = 1e6 # micro seconds + self.qtpreview = 0 + self.nopreview = 1 #self.output = 'preview.jpg' - self.timelapse = 10000 - self.timeout = 50000 + self.framerate = 2 + self.timelapse = 2000 + self.timeout = 10000 def make_cmd(self): @@ -50,7 +51,7 @@ def make_cmd(self): if value: cmd.append('--' + key) - keys = ('shutter', 'timelapse', 'timeout') + keys = ('shutter', 'timelapse', 'timeout', 'framerate', 'latest') for key in keys: value = getattr(self, key.replace('-', '')) @@ -65,9 +66,9 @@ async def run(self): """ Make one call to libcamera""" cmd = self.make_cmd() - + print('running:', ' '.join(cmd)) subprocess.run(cmd) - + print('DONE libcamera call') image = Image.open(self.latest) ax = await self.get() From dc2ac38e176b276430d12cd6ef464bdba820f1d6 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 30 Nov 2022 17:32:16 -0500 Subject: [PATCH 635/642] veyes scaling options --- karmapi/veyes.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/karmapi/veyes.py b/karmapi/veyes.py index 82dc272..c29eeff 100644 --- a/karmapi/veyes.py +++ b/karmapi/veyes.py @@ -7,6 +7,8 @@ import random import subprocess +from collections import deque + from io import BytesIO import time @@ -38,9 +40,9 @@ def __init__(self): #self.output = 'preview.jpg' self.framerate = 2 self.timelapse = 2000 - self.timeout = 10000 - - + self.timeout = 0 + self.sizes = deque(0, 256, 512, 1024) + def make_cmd(self): cmd = ['libcamera-still'] @@ -71,6 +73,11 @@ async def run(self): print('DONE libcamera call') image = Image.open(self.latest) + if sizes[0] != 0: + x, y = sizes[0] + scale = size / max(x, y) + image = image.resize((int(x * scale), int(y * scale)) + ax = await self.get() ax.imshow(image) From d0458ea5c0e9c3d256fb143ac95beddf2f9d527c Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 30 Nov 2022 17:35:48 -0500 Subject: [PATCH 636/642] veyes async libcamera version --- karmapi/veyes.py | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/karmapi/veyes.py b/karmapi/veyes.py index 82dc272..e478aa0 100644 --- a/karmapi/veyes.py +++ b/karmapi/veyes.py @@ -6,6 +6,7 @@ from pathlib import Path import random import subprocess +import asyncio from io import BytesIO @@ -39,26 +40,36 @@ def __init__(self): self.framerate = 2 self.timelapse = 2000 self.timeout = 10000 + self.gain = 10 + def normal(self): + + self.shutter = 0 + self.gain = 0 + self.timelapse = 0 + self.immediate = True def make_cmd(self): cmd = ['libcamera-still'] - for key in ['timestamp', 'datetime', 'nopreview', 'qt-preview']: + flags = ['timestamp', 'datetime', 'nopreview', 'qt-preview'] + flags += ['immediate'] + for key in flags: value = getattr(self, key.replace('-', '')) if value: cmd.append('--' + key) keys = ('shutter', 'timelapse', 'timeout', 'framerate', 'latest') + keys += ('gain', ) for key in keys: value = getattr(self, key.replace('-', '')) if value: cmd.append('--' + key) cmd.append(str(value)) - + return cmd @@ -66,8 +77,14 @@ async def run(self): """ Make one call to libcamera""" cmd = self.make_cmd() + pipe = asyncio.subprocess.PIPE print('running:', ' '.join(cmd)) - subprocess.run(cmd) + proc = await asyncio.create_subprocess_shell( + ' '.join(cmd), + stdout=pipe, stderr=pipe) + #subprocess.run(cmd, capture_output=True) + print(proc) + await proc.wait() print('DONE libcamera call') image = Image.open(self.latest) @@ -179,6 +196,7 @@ def main(): fm = farm.Farm() camera = PiCamera() + camera.normal() fm.add(camera) fm.shep.path.append(camera) farm.run(fm) From 7b24eff6cd55f6b58e9ef1a18729560c59ec6a01 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 30 Nov 2022 17:55:33 -0500 Subject: [PATCH 637/642] more veyes hacks --- karmapi/veyes.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/karmapi/veyes.py b/karmapi/veyes.py index e94750e..6bf04dc 100644 --- a/karmapi/veyes.py +++ b/karmapi/veyes.py @@ -43,7 +43,7 @@ def __init__(self): self.timelapse = 2000 self.timeout = 10000 self.gain = 10 - self.sizes = deque(0, 256, 512, 1024) + self.sizes = deque((0, 256, 512, 1024)) def normal(self): @@ -84,25 +84,31 @@ async def run(self): cmd = self.make_cmd() pipe = asyncio.subprocess.PIPE print('running:', ' '.join(cmd)) + import time + t1 = time.time() proc = await asyncio.create_subprocess_shell( ' '.join(cmd), stdout=pipe, stderr=pipe) #subprocess.run(cmd, capture_output=True) print(proc) await proc.wait() - print('DONE libcamera call') + t2 = time.time() + print(f'DONE libcamera call {t2-t1}') image = Image.open(self.latest) - if sizes[0] != 0: - x, y = sizes[0] + size = self.sizes[0] + if size != 0: + x, y = image.size scale = size / max(x, y) - image = image.resize((int(x * scale), int(y * scale)) + image = image.resize((int(x * scale), int(y * scale))) ax = await self.get() ax.imshow(image) ax.show() + t3 = time.time() + print(f'done imshow {t3-t2}') From 5604ceb5f33fd88ce3f1c183a6fc6c1bd00f2590 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Sat, 29 Apr 2023 18:52:39 -0400 Subject: [PATCH 638/642] fix tankrain for blume latest --- karmapi/tankrain.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/karmapi/tankrain.py b/karmapi/tankrain.py index ebb5a7e..5fab8a2 100644 --- a/karmapi/tankrain.py +++ b/karmapi/tankrain.py @@ -21,6 +21,7 @@ import argparse import random import sys +import asyncio import numpy as np from PIL import Image @@ -33,8 +34,6 @@ from collections import defaultdict -import curio - from karmapi import base from blume import magic, farm @@ -510,11 +509,11 @@ def main(args=None): frm.add(tankrain) frm.shep.path.append(tankrain) - curio.run(farm.start_and_run(frm)) + farm.run(frm) sys.exit() else: - curio.run(fetch(args.minutes)) + asyncio.run(fetch(args.minutes)) if __name__ == '__main__': # Radar From a1fec64a186629a5f5cb490397997f2585eb45ae Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Mon, 26 Jun 2023 10:25:31 -0400 Subject: [PATCH 639/642] try and get cpr working again --- karmapi/cpr.py | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/karmapi/cpr.py b/karmapi/cpr.py index cb610cb..9a93e2a 100644 --- a/karmapi/cpr.py +++ b/karmapi/cpr.py @@ -146,7 +146,8 @@ from collections import deque, defaultdict, Counter, namedtuple -import curio +import asyncio +curio = asyncio import numpy as np @@ -343,7 +344,7 @@ def lowhemi(self, pixels): return self.poleview(pixels, wind=-1) - async def run(self, elsewhere=False): + async def run(self, elsewhere=True): """Run the sphere Really want to just add to queue and let something else @@ -384,21 +385,16 @@ async def arun(self): async def prun(self): - while True: - - if not self.paused: - ball = await curio.run_in_process(self.tick) - #print(f'{self} sleep:{self.sleep}') - - # hack, just move stuff around - self.post_run_update(ball) - self.post_tick() - - - #ball = await tick.join() - #print('joined', ball, self.sleep) - await curio.sleep(self.sleep) - + if not self.paused: + #XSball = await curio.run_in_process(self.tick) + print('TICKING', self) + ball = self.tick() + print('TICKING', ball) + #print(f'{self} sleep:{self.sleep}') + + # hack, just move stuff around + self.post_run_update(ball) + self.post_tick() def post_run_update(self, ball): """ Hack running in process """ @@ -831,7 +827,7 @@ async def random_step_some(self): balls = self.balls[:] while balls: ix = randint(0, len(balls)-1) - + print('stepping ball', ix) await balls[ix].run() del balls[ix] @@ -896,7 +892,9 @@ def draw_ball(self, ball): print('DRAW_BALL', type(self)) - width, height = self.size, self.size + #width, height = self.size, self.size + + width, height = ball.size image = ball.project(self.views[self.view]) From 59341a5505dd7dc77282d7a40f9290d74a413a0a Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 28 Jun 2023 17:58:47 -0400 Subject: [PATCH 640/642] sphinx extension png to img --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 396f288..2790cbd 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -34,7 +34,7 @@ 'sphinx.ext.doctest', 'sphinx.ext.intersphinx', 'sphinx.ext.todo', - 'sphinx.ext.pngmath', + 'sphinx.ext.imgmath', 'sphinx.ext.ifconfig', 'sphinx.ext.viewcode', 'sphinx.ext.napoleon', From dfe811ead010e08aeaef480d4a123687263026f5 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 28 Jun 2023 22:57:20 -0400 Subject: [PATCH 641/642] futile attempt to unravel ottawa weather bitrot --- karmapi/oo2ueh.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/karmapi/oo2ueh.py b/karmapi/oo2ueh.py index f6756e7..11a028d 100644 --- a/karmapi/oo2ueh.py +++ b/karmapi/oo2ueh.py @@ -53,13 +53,13 @@ def find_images(data): if __name__ == '__main__': #print(help(requests.get)) - + print(URL) result = requests.get(URL, PARMS) print(result) print(type(result.content)) print(len(result.content)) - find_images(result.content) + find_images(result.content.decode()) 1/0 print(result.content.decode()) From 605b0ab83e982249f1aaa7b0a0c02c3b0aec63b5 Mon Sep 17 00:00:00 2001 From: Johnny Gill Date: Wed, 5 Mar 2025 22:42:47 +0000 Subject: [PATCH 642/642] random hat colours --- karmapi/hat.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/karmapi/hat.py b/karmapi/hat.py index c823e3b..3a89c63 100644 --- a/karmapi/hat.py +++ b/karmapi/hat.py @@ -15,7 +15,7 @@ def __init__(self): self.colour = (170, 80, 80) - self.stats = False + self.stats = True def whattimeisit(self): @@ -47,11 +47,18 @@ def run(self): h.show_message(message, text_colour=colour, scroll_speed=0.2) - else: - self.hat.set_pixels([self.colour] * 64) - - time.sleep(2) - continue + pixels = [random_colour()] * 32 + [random_colour()] * 32 + #pixels = pixels * 8 + h.set_pixels(pixels) + time.sleep(2) + continue + + +def random_colour(): + + ri = random.randint + + return [ri(0, 256), ri(0, 256), ri(0,256)] if __name__ == '__main__':

JSmTq% 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