From bfa76c3b03e96864120354f87ee08dd21a77e8e6 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sat, 15 Feb 2025 20:14:45 -0800 Subject: [PATCH 01/69] Documentation cleanup and update. Added a Motif Finding tutorial. --- README.md | 164 +++- dev/release_guide.md | 11 +- docs/README.md | 41 +- docs/_config.yml | 2 +- docs/_layouts/global.html | 1 + docs/img/4-node-directed-graphlets.png | Bin 0 -> 718043 bytes docs/img/Directed-Graphlet-G17.png | Bin 0 -> 7214 bytes docs/img/Directed-Graphlet-G22.png | Bin 0 -> 27084 bytes docs/img/G11_motif.png | Bin 0 -> 27738 bytes docs/img/G4_and_G5_directed_network_motif.png | Bin 0 -> 45890 bytes docs/img/GraphFrames-Logo-Dark-Small.png | Bin 0 -> 15697 bytes docs/img/GraphFrames-Logo-Large.png | Bin 0 -> 70906 bytes docs/img/GraphFrames-Logo-Small.png | Bin 0 -> 14054 bytes docs/img/directed_graphlets.webp | Bin 0 -> 40580 bytes docs/index.md | 9 +- docs/motif-tutorial.md | 768 ++++++++++++++++++ docs/user-guide.md | 76 +- 17 files changed, 986 insertions(+), 86 deletions(-) create mode 100644 docs/img/4-node-directed-graphlets.png create mode 100644 docs/img/Directed-Graphlet-G17.png create mode 100644 docs/img/Directed-Graphlet-G22.png create mode 100644 docs/img/G11_motif.png create mode 100644 docs/img/G4_and_G5_directed_network_motif.png create mode 100644 docs/img/GraphFrames-Logo-Dark-Small.png create mode 100644 docs/img/GraphFrames-Logo-Large.png create mode 100644 docs/img/GraphFrames-Logo-Small.png create mode 100644 docs/img/directed_graphlets.webp create mode 100644 docs/motif-tutorial.md diff --git a/README.md b/README.md index 7e1eece68..fa55a5bb3 100644 --- a/README.md +++ b/README.md @@ -1,38 +1,170 @@ # graphframes -[![Build Status](https://travis-ci.org/graphframes/graphframes.svg?branch=master)](https://travis-ci.org/graphframes/graphframes) -[![codecov.io](http://codecov.io/github/graphframes/graphframes/coverage.svg?branch=master)](http://codecov.io/github/graphframes/graphframes?branch=master) +[![Scala CI](https://github.com/graphframes/graphframes/actions/workflows/scala-ci.yml/badge.svg)](https://github.com/graphframes/graphframes/actions/workflows/scala-ci.yml) +[![Python CI](https://github.com/graphframes/graphframes/actions/workflows/python-ci.yml/badge.svg)](https://github.com/graphframes/graphframes/actions/workflows/python-ci.yml) +[![pages-build-deployment](https://github.com/graphframes/graphframes/actions/workflows/pages/pages-build-deployment/badge.svg)](https://github.com/graphframes/graphframes/actions/workflows/pages/pages-build-deployment) # GraphFrames: DataFrame-based Graphs -This is a package for DataFrame-based graphs on top of Apache Spark. -Users can write highly expressive queries by leveraging the DataFrame API, combined with a new -API for motif finding. The user also benefits from DataFrame performance optimizations -within the Spark SQL engine. +This is a package for DataFrame-based graphs on top of Apache Spark. Users can write highly expressive queries by leveraging the DataFrame API, combined with a new API for network motif finding. The user also benefits from DataFrame performance optimizations within the Spark SQL engine. GraphFrames works in Java, Scala, and Python. -You can find user guide and API docs at https://graphframes.github.io/graphframes. +You can find user guide and API docs at https://graphframes.github.io/graphframes + +## Installation and Quick-Start + +The easiest way to start using GraphFrames is through the [Spark Packages system](https://spark-packages.org/package/graphframes/graphframes). Just run the following command: + +```bash +# Interactive Scala/Java +$ spark-shell --packages graphframes:graphframes:0.8.3-spark3.5-s_2.12 + +# Interactive Python +$ pyspark --packages graphframes:graphframes:0.8.3-spark3.5-s_2.12 + +# Submit a script in Scala/Java/Python +$ spark-submit --packages graphframes:graphframes:0.8.3-spark3.5-s_2.12 script.py +``` + +Now you can create a GraphFrame as follows. + +In Python: + +```python +from pyspark.sql import SparkSession +from graphframes import GraphFrame + +spark = SparkSession.builder.getOrCreate() + +nodes = [ + (1, "Alice", 30), + (2, "Bob", 25), + (3, "Charlie", 35) +] +nodes_df = spark.createDataFrame(nodes, ["id", "name", "age"]) + +edges = [ + (1, 2, "friend"), + (2, 1, "friend"), + (2, 3, "friend"), + (3, 2, "enemy") # eek! +] +edges_df = spark.createDataFrame(edges, ["src", "dst", "relationship"]) + +g = GraphFrame(nodes_df, edges_df) +``` + +Now let's run some graph algorithms at scale! + +```python +g.inDegrees.show() + +# +---+--------+ +# | id|inDegree| +# +---+--------+ +# | 2| 2| +# | 1| 1| +# | 3| 1| +# +---+--------+ + +g.outDegrees.show() + +# +---+---------+ +# | id|outDegree| +# +---+---------+ +# | 1| 1| +# | 2| 2| +# | 3| 1| +# +---+---------+ + +g.degrees.show() + +# +---+------+ +# | id|degree| +# +---+------+ +# | 1| 2| +# | 2| 4| +# | 3| 2| +# +---+------+ + +g2 = g.pageRank(resetProbability=0.15, tol=0.01) +g2.vertices.show() + +# +---+-----+---+------------------+ +# | id| name|age| pagerank| +# +---+-----+---+------------------+ +# | 1| John| 30|0.7758750474847483| +# | 2|Alice| 25|1.4482499050305027| +# | 3| Bob| 35|0.7758750474847483| +# +---+-----+---+------------------+ + +# GraphFrames' most used feature... +# Connected components can do big data entity resolution on billions or even trillions of records! +# First connect records with a similarity metric, then run connectedComponents. +# This gives you groups of identical records, which you then link by same_as edges or merge into list-based master records. +sc.setCheckpointDir("/tmp/graphframes-example-connected-components") # required by GraphFrames.connectedComponents +g.connectedComponents().show() + +# +---+-----+---+---------+ +# | id| name|age|component| +# +---+-----+---+---------+ +# | 1| John| 30| 1| +# | 2|Alice| 25| 1| +# | 3| Bob| 35| 1| +# +---+-----+---+---------+ + +# Find frenemies with network motif finding! See how graph and relational queries are combined? +( + g.find("(a)-[e]->(b); (b)-[e2]->(a)") + .filter("e.relationship = 'friend' and e2.relationship = 'enemy'") + .show() +) + +# These are paths, which you can aggregate and count to find complex patterns. +# +------------+--------------+----------------+-------------+ +# | a| e| b| e2| +# +------------+--------------+----------------+-------------+ +# |{2, Bob, 25}|{2, 3, friend}|{3, Charlie, 35}|{3, 2, enemy}| +# +------------+--------------+----------------+-------------+ +``` + +## Learn GraphFrames + +To learn more about GraphFrames, check out these resources: + +* [GraphFrames Network Motif Finding Tutorial](https://graphframes.github.io/graphframes/docs/_site/motif-tutorial.html) +* [Introducing GraphFrames](https://databricks.com/blog/2016/03/03/introducing-graphframes.html) +* [On-Time Flight Performance with GraphFrames for Apache Spark](https://databricks.com/blog/2016/03/16/on-time-flight-performance-with-graphframes-for-apache-spark.html) + +## GraphFrames on PyPI is Unofficial + +The project is not in ownership or control of the [graphframes PyPI package](https://pypi.org/project/graphframes/) (installs 0.6.0) or [graphframes-latest PyPI package](https://pypi.org/project/graphframes-latest/) (installs 0.8.3). We recommend using the Spark Packages system to install the latest version of GraphFrames. The PyPI packages are not maintained by the GraphFrames project. + +If you are in control of one of these packages, please reach out to us to discuss how we can work together to keep them up to date. Hopefully this situation will be addressed in the near future. + +See [Installation and Quick-Start](#installation-and-quick-start) for the best way to install and use GraphFrames. + +## GraphFrames Internals + +To learn how GraphFrames works internally to combine graph and relational queries, check out the paper [GraphFrames: An Integrated API for Mixing Graph and +Relational Queries, Dave et al. 2016](https://people.eecs.berkeley.edu/~matei/papers/2016/grades_graphframes.pdf). ## Building and running unit tests -To compile this project, run `build/sbt assembly` from the project home directory. -This will also run the Scala unit tests. +To compile this project, run `build/sbt assembly` from the project home directory. This will also run the Scala unit tests. -To run the Python unit tests, run the `run-tests.sh` script from the `python/` directory. -You will need to set `SPARK_HOME` to your local Spark installation directory. +To run the Python unit tests, run the `run-tests.sh` script from the `python/` directory. You will need to set `SPARK_HOME` to your local Spark installation directory. ## Release new version + Please see guide `dev/release_guide.md`. ## Spark version compatibility -This project is compatible with Spark 2.4+. However, significant speed improvements have been -made to DataFrames in more recent versions of Spark, so you may see speedups from using the latest -Spark version. +This project is compatible with Spark 2.4+. However, significant speed improvements have been made to DataFrames in more recent versions of Spark, so you may see speedups from using the latest Spark version. ## Contributing -GraphFrames is collaborative effort among UC Berkeley, MIT, and Databricks. -We welcome open source contributions as well! +GraphFrames is collaborative effort among UC Berkeley, MIT, Databricks and the open source community. We welcome open source contributions as well! ## Releases: diff --git a/dev/release_guide.md b/dev/release_guide.md index 19be87366..f89708c9c 100644 --- a/dev/release_guide.md +++ b/dev/release_guide.md @@ -1,8 +1,8 @@ -# Guild for releasing a new Graphframe version +# Guild for releasing a new Graphframes version -## How to build GraphFrame package ? +## How to build GraphFrames package ? -To build a GraphFrame package for releasing, you only need to run the following command: +To build a GraphFrames package for releasing, you only need to run the following command: ``` cd graphframe_repo @@ -30,10 +30,9 @@ then upload the zip file generated by instructions in "How to build GraphFrame p ## How to publish the GraphFrame doc ? -GraphFrame doc is hosted in 'https://graphframes.github.io/graphframes/', to publish doc, -you just need to build doc content, then push the doc content to gh-pages branch of https://github.com/graphframes/graphframes project. +GraphFrames docs are hosted in 'https://graphframes.github.io/graphframes/'. To publish the docs, you just need to build the doc content, then push the doc content to gh-pages branch of the https://github.com/graphframes/graphframes project. -Before building doc, you need to install jekyll, please refer to 'docs/README.md' for details. +Before building the docs, you need to install jekyll, please refer to 'docs/README.md' for details. The following command is for building and publishing doc: ``` diff --git a/docs/README.md b/docs/README.md index 769c1cd3f..3d7da67d5 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,28 +1,18 @@ Welcome to the GraphFrames Spark Package documentation! -This readme will walk you through navigating and building the GraphFrames documentation, which is -included here with the source code. +This readme will walk you through navigating and building the GraphFrames documentation, which is included here with the source code. -Read on to learn more about viewing documentation in plain text (i.e., markdown) or building the -documentation yourself. Why build it yourself? So that you have the docs that correspond to -whichever version of GraphFrames you currently have checked out of revision control. +Read on to learn more about viewing documentation in plain text (i.e., markdown) or building the documentation yourself. Why build it yourself? So that you have the docs that correspond to whichever version of GraphFrames you currently have checked out of revision control. ## Generating the Documentation HTML -We include the GraphFrames documentation as part of the source (as opposed to using a hosted wiki, such as -the github wiki, as the definitive documentation) to enable the documentation to evolve along with -the source code and be captured by revision control (currently git). This way the code automatically -includes the version of the documentation that is relevant regardless of which version or release -you have checked out or downloaded. +We include the GraphFrames documentation as part of the source (as opposed to using a hosted wiki, such as the github wiki, as the definitive documentation) to enable the documentation to evolve along with the source code and be captured by revision control (currently git). This way the code automatically +includes the version of the documentation that is relevant regardless of which version or release you have checked out or downloaded. -In this directory you will find textfiles formatted using Markdown, with an ".md" suffix. You can -read those text files directly if you want. Start with index.md. +In this directory you will find textfiles formatted using Markdown, with an ".md" suffix. You can read those text files directly if you want. Start with index.md. The markdown code can be compiled to HTML using the [Jekyll tool](http://jekyllrb.com). -`Jekyll` and a few dependencies must be installed for this to work. We recommend -installing via the Ruby Gem dependency manager. Since the exact HTML output -varies between versions of Jekyll and its dependencies, we list specific versions here -in some cases: +`Jekyll` and a few dependencies must be installed for this to work. We recommend installing via the Ruby Gem dependency manager. Since the exact HTML output varies between versions of Jekyll and its dependencies, we list specific versions here in some cases: $ sudo gem install jekyll $ sudo gem install jekyll-redirect-from @@ -32,8 +22,7 @@ On macOS, with the default Ruby, please install Jekyll with Bundler as [instruct $ sudo gem install jekyll bundler $ sudo gem install jekyll-redirect-from -Execute `jekyll build` from the `docs/` directory to compile the site. Compiling the site with Jekyll will create a directory -called `_site` containing index.html as well as the rest of the compiled files. +Execute `jekyll build` from the `docs/` directory to compile the site. Compiling the site with Jekyll will create a directory called `_site` containing index.html as well as the rest of the compiled files. You can modify the default Jekyll build as follows: @@ -45,27 +34,23 @@ You can modify the default Jekyll build as follows: $ PRODUCTION=1 jekyll build Note that `SPARK_HOME` must be set to your local Spark installation in order to generate the docs. + To manually point to a specific `Spark` installation, $ SPARK_HOME= PRODUCTION=1 jekyll build ## Sphinx We use Sphinx to generate Python API docs, so you will need to install it by running -`sudo pip install sphinx`. + + sudo pip install sphinx ## API Docs (Scaladoc, Sphinx) You can build just the scaladoc by running `build/sbt unidoc` from the GRAPHFRAMES_PROJECT_ROOT directory. -Similarly, you can build just the Python docs by running `make html` from the -GRAPHFRAMES_PROJECT_ROOT/python/docs directory. Documentation is only generated for classes that are listed as -public in `__init__.py`. +Similarly, you can build just the Python docs by running `make html` from the GRAPHFRAMES_PROJECT_ROOT/python/docs directory. Documentation is only generated for classes that are listed as public in `__init__.py`. -When you run `jekyll` in the `docs` directory, it will also copy over the scaladoc for the various -subprojects into the `docs` directory (and then also into the `_site` directory). We use a -jekyll plugin to run `build/sbt unidoc` before building the site so if you haven't run it (recently) it -may take some time as it generates all of the scaladoc. The jekyll plugin also generates the +When you run `jekyll` in the `docs` directory, it will also copy over the scaladoc for the various subprojects into the `docs` directory (and then also into the `_site` directory). We use a jekyll plugin to run `build/sbt unidoc` before building the site so if you haven't run it (recently) it may take some time as it generates all of the scaladoc. The jekyll plugin also generates the Python docs [Sphinx](http://sphinx-doc.org/). -NOTE: To skip the step of building and copying over the Scala, Python API docs, run `SKIP_API=1 -jekyll build`. To skip building Scala API docs, run `SKIP_SCALADOC=1 jekyll build`; to skip building Python API docs, run `SKIP_PYTHONDOC=1 jekyll build`. +NOTE: To skip the step of building and copying over the Scala, Python API docs, run `SKIP_API=1 jekyll build`. To skip building Scala API docs, run `SKIP_SCALADOC=1 jekyll build`; to skip building Python API docs, run `SKIP_PYTHONDOC=1 jekyll build`. diff --git a/docs/_config.yml b/docs/_config.yml index 4c1ab075c..379fc242f 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -13,7 +13,7 @@ include: # These allow the documentation to be updated with newer releases # of Spark, Scala, and Mesos. -GRAPHFRAMES_VERSION: 0.8.4 +GRAPHFRAMES_VERSION: 0.8.5 #SCALA_BINARY_VERSION: "2.10" #SCALA_VERSION: "2.10.4" #MESOS_VERSION: 0.21.0 diff --git a/docs/_layouts/global.html b/docs/_layouts/global.html index 3ee1a85ee..51bc021ea 100755 --- a/docs/_layouts/global.html +++ b/docs/_layouts/global.html @@ -74,6 +74,7 @@ diff --git a/docs/img/4-node-directed-graphlets.png b/docs/img/4-node-directed-graphlets.png new file mode 100644 index 0000000000000000000000000000000000000000..74d8e18065e26844d109cb531896d10590106d92 GIT binary patch literal 718043 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

EsW08bt$rI7D{DNR+-^Sr`q#6yme@0+ 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

>0cdlaw&?@_`WMcMmsG6z!eeA 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 z

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

M>@=dbN=J|k!A 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�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 z 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

pm~^t~aXx!U+EkZJM!(mL=#acTgOm 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%0A@j8lq#30T~Rp5t5jgJ-Y=4~epWiA*qY~=F*K|9 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

`bPUu}mUB&BO3`~Fu1|zX2JB$d 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%0D(a0oM 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 Uu3F6Fl^=!%L|3I=$>!~U0Z*>VDgXcg literal 0 HcmV?d00001 diff --git a/docs/img/Directed-Graphlet-G22.png b/docs/img/Directed-Graphlet-G22.png new file mode 100644 index 0000000000000000000000000000000000000000..1778e56fe31a19f169e1d53ad6e7c182ff3515eb GIT binary patch literal 27084 zcmce-W0WRAvo89!jcHE1r)^`}wr$(CHLYpewvA~{+qP}n_nmL=v(H}l{=cBEQmt*`#Wl21P-NYt?jp7 zg&8U#2NnJZxF*XYic1~bQi>+^NUaw+=-i?&_s=Vj$<8aEDYwl#pDi9YT)?r8cNq)j z0yv>uJbfg>qnV7XtU;V702Ces-5iWek1)kCzn~AKap!L9;(_%T;i5iB@hs=#YoRfi zs0{!h!QOSw(~gC@i2-a^ftJw_0P@jp4;yZaBs&ld@vz{Lcd zyl0rchLPpua0IHf!DDmq)1(~U9=+!rJZ~kZRD93w!)AM+(Gag>GE;96<6!=qsE)VW z5`RBT5!M94?@(tytrwoA5fKZX#Aity>trwiK;4zNUH`d>OhCO46)a#4?eL3)oymK+ zghB|n@IK%{h`Rr!!#(VQu=?8w*xoPi=rPlN#3?UYp}_PD^D(>rU z;WgyXWBqipy??r$yCy3Vd2|L|MaOT?+%pCF7*!R$wfp&bs5R4R%|5x*5?~$iEmMO+#D1|vs5tI^lXY90$GYJo z+U+Cr=h**SeE#+H&hQqp!%yZNrT{-RoR8#%0u~O^k8FrMgTdb8V^7bGi~phTG`P|_ zWRI`+4if{D6$}+z5lr`Y;$)X-rIdo0A9EfFyIk&d>7lnOx0w1e#!JYh^f$8u*tY+l z9*>``^qDK@_3L@9Nh$_Wv!7a!dK-B^_##jtihk!kD_D!h%-7D@<0&XCzMj378p;rq zvAY$T-M_Ebl+y&K zq0qUhI{@#ihHUzVX**&Ea3{d|{{8s`4$~9f|KsvH$^IG6tnXJ21}k6^AA`aef(lU$ zANqPiAXF}gmjUvy2l8+ae%&AQ8Z3YiO*p_k7QVRmxM7Wh!^M#yn2@Q z;>FY}AY%U-EKr(}b|%vd!ziGhhHb>&h+@kppT0X*X@v8Mel!9o^`)j#9{SfY(qV)Y z>0_nBYxyS`9;mY}`Zx8wd1IaZ^{jLI`OR#bW*ww@8<`sfbDQ}F;@PnSrKT6>M(Nq) zop&?Tk8B$H7r0j-d4O1|^f1XdQ6lmv3>Qo&bjeP`yo|dH2}+uXe_Q`S z|3rUh|6afBu8<*LxbQ6bNRlE~`7XU{naU3U(BB3XASErLz=gC~uUmIDH90pK*9-Qvg&e%`3SbGr8;SJ$U zv8)+?+Dvn)npG~T_b$)YK@Dy)2_sy<8zCHF+p=4;pR+Tu!Lr3;+put2%v+7KJTgzR z>6&@Zw+;mx>>3fVX_z^V?_)`&3>X~LQ>mAz`xO5w{!t7&XH$$^fEZQN;P6xrjoFrWW{5Z?ULux z`GAL$9#u0Tone_l-7KutY!iK9x)$kLnpL5btdq0>;WfWGp=;f}(&dC}kU8{or1jKc z32z?nCn5ym1L6~2TJ%n|NVH5e{h-!wIjnBa_q3awEbT1EEZ3hK*||JFoCRlslVSWg z*ErxZD>7@O3uWNbTkQ?+`cvp0feb}U$F7Z4{jFL`XHA>0t?kdqI`+EfI_>)0I(wU* z*;#GD%Gin-4>bNKJ{*rG&!$Ja$DtSg^?Tn~FZEEx7a7kz+ufm;-QDG_ z!As$b_to5i)#=z%)uYe0*(Le?+R0O}(b&l0`C-Sk+il7V!L484!~WzEK2i^8AebZ= zCukEGDkwGB6+{|@3FHFQ1H>Q5DFj}8L1-8_4LrvzvwqZTOAnvC%e*@wxsbBZfe@8n zJkTw0DIqPwx!>}>SrK0fYl=z|W#sdt(OcTgZPv&FOX8W&t_pSb~=(n=_f?%McZtoT!@e7)LNrbNEzpH_Kl1 z1k)Ob5O^fWx5H@=GpyApdQZ~FWh65=Cw(>El*XgcrE#FqX;|H=_|C*d;$`)iky)Cl z!vWSN(dKnG>|x;%O1c`4J5q)<$ZR@woVY3_Rj9+vV^*EBLJpU3kw|=7c6;cJ_gt`5 zU8~?-(5knsB(HMqs=8Yl)X-!qW!f@Tm(gH7neaFFFTvri6NJ;+VcMh?_tmHOdzjqY+Mg}cIp;puMXKsN>ldKKlXmBeg(vSGol$N*9|%x7_zaDlL@qfgn= zY}MB8Rz&xOI-A4Fph=EYNKtnpM^aLXk2an9=a?I6SH-ifzQ|xibdoJ~OC?ctd}Vv{ zs+-FMb`@)g6@GP;`dVvrQ?>Jk-dRZvpW3BjmkXFnkfD&8h`Y$0Xk=6cn{VZKd57kK zUXxqGPO(YGrZt9bSL1-4RG(@=m5J7tAN}X&VDq+3)Pm~5!CLqlTr=NhTp z8}>QP+KWYsv6`BU^+cKG)9NZ`UwhJnd1ro?ncL}Qq!;KT3;RzN>$S0Ut!AWirE{-l zKAW#5FaxMn#CjyQck`FMVxiwcMN#5=nS))$mBrPE`-hW#d7*2X9h!(A`_FULs&k9w z#O-3L_(k}%yqxxx*XmymCpVj@Y2^6LGIoD_9B)UcOAKXQG7-6a9*=T!6oI?E!zGj^_FT9QZSiR-x>G<)??<~%^_kIZ8iNr+GW+iaO=-zfZ?>hDz!*H-u9mKS)t?C_P(%4u;F**vU!GNC%JXnUF9+4>vrff`$kS+ z>O49uU;4TN6`(jVk0YM!$EV<-1VInMatj!Mx>QaMf-oJDzXOV&To%`&&#SH1r(`zF-tOAx zzU02c`PxppiTs1=a>guI*#)Fv>I*b9AqXss1X%)jyofMSmoSx)0Z;+s&;W1{Yybo> z1_BJcAUOXM7X_gJfc@t?C;$*@0RaE+JhH&&zbh6P{+0Q!Cs_P102J^I1sL3OLH{Rr zS1#E9iGwfz(*OcWLK6QPp=9J}Vq)uLZs(i<0__0&0Anw%;RFC+kp2rG5{e|(K>CXo z%IePQGSZwzb~bbd#&(7#bnZ6x|L6d?-8q3#8xv;(LU$W$TPIF;9-{x`-~`71eWoWO z{7)8VD;^?s8F@k>J4X{jHaZ461|nWqLPA1rM`Ke?MPbqZE)IO-Au@M%w&$d$cXM;2 zb7Q8nb2Ou8vUU3JZUH+;|1X7}k&c1>e`o`Xa{v3vDR1F!Vyz); zVFMg9U>&^73@qIL$^ZXJ`M)*(uafHjw~P z@528(@xKdl)Bo%F{~C$^8s`6e1&%W>EI0lC%o#5%qB*__a2jzfgyochPau>1=Sl_M zDS+YM6Bx*0gm!6w?_>)S!UD?fAm=&|`pROc_|S;7x`iS_(1^V}$b_wEZXcBLu#Nl< zZWMHk>l+)Cs)emm_LL+8c>-H}TftHZ_9;)7j$#4l%{!NyYa4FtS8F~E4O`>FbFHyd zlAsFGpfhOK1L1CX2ZksCzs{Csh{(nqF zY`v(_?aW_mu~k@ay`hkpB|)QBr4dr|xI0AH_~RA>3JQ9>FqVSGY$|P=lNe7fCwsFy zz&syXZY&LK@!-C3>Eegi)5&~Ug7eK^h<4Wt>>`PTWbQGqc&B3N{r!F8W+d>o=OdtC zTb?O!-tC8J_d25E@p_bw{+1(^O7WveDkaigb_MpDHfFAJms*KQ!%i{A8}t z?8$bu&IjrP6-{`h!K|eIU{tX;Fywpg$T%o|O272i^^TBcoi&Hd!(D;%$(%wKr%M?w z-wzZrX^JDetuC1iHtWJ9YSrn3v6PX8g{1TrYXOxC73NA_k=-Mo85#6zo7PUi#axNp z$#icJi{BWj8#XODf-u3p-8h=d)T)^LxGA77a8*A>mGI zve*=xNT=vhYv<;&y|&D(o-NhTE~=5=llqI5Q>lt?ugsOKuCiJ+Dw1wAoom!vPNcIf zTz}=Ce!KWcOLZWmvKM8+1d2h?r54GNrQeuKAc*( zU2Qfg>)^2yfE+G zaXlDCN05sT8{HL&Y|IaVmCB$>qOy8>x`-@o=PV%xlEMQ?lLbpXn#^8k|D4t6QJXCI z{rFa`Q#_~IiT`pZH_>3NaZ)1QE2t?iA8Y$Yo55zaK&2MP=Ds?f!zI@eRj#iAWV&P% z)I<3DR|!~N5yj2o? zqM+~ZwjNDCf}pf2D`bzQ_(AmaL=}ymuDY!dP8U(PlU&`FFlg2FYfY9dtr2#c;aHFE zu~^`9RcSSYtMqqJ?QAVB);=hfrgq~stTyVCLefubzrj#!=TkoEKd zT0QQH1Cj|;4c0my*Gd&;R_gxh~jzD zgP07l>%)HDT^rm!JmzI_xxt#`4nA!u#pv=Bk+!m0+ZH;RO({%|5k^dO;GQpI(5n7c zERqzFWi$+K`+FdjVxGRGtl92NN%~9$qOvzp+A9?LtIX&UteV;B6@KOXuLnCjyJoF> z-0CnBIStql+BE{S#ZDl^{?VQkyX|@|JQlO!STb#yU{OS)%NT}cgC~L#+$D-Rgxyvr zY00rH=y4*Y5~EIU7L`i5w8dNzLfhzz)6wwISjJ+tj+CCy1G)h+!gm&i{f;7bzpoE= zJL3tGnh~W!$xChz^Ue1cH2N;08jW}j;UV;E;&{XyFf-G?tv4(_ug;z$iQx98RH~K3 z@0kEj?_&lLvs;aNv4KR-V#aC1~1Pv^87tA%Qrt)+4ai#f=kuk$o!(9I|ucGzpH z#Y%|}NW|$E43hg_E6ipyh2f}0bifVNCwBw^Uze?x%8n3lg8V2F7{o3cA{brAziYM| zm*L9AlfZCraVh2Zhf|tWXC?+=C8V~6hg*PvJf#iVhb`7op9TFn1B8aK?Cl?oE8=s z@qksIK|?DW0MJQT(EK~(cmB?oIuMV>F_Rk*2Gg-uZ{@Z*nMT5bFOo?@_zE^!EG0W0 zjFJ|z=~B#Ls3xG0=;L*_Gva;S>z*5h!^PHLu2dtdBXprmdWRx^D1GM$!!gS3QRO<3{-eik?iGrbfspXu z+@g9kj0rRL0Q6lXjHYO!Fk7T8&qzK3&cN0>;%?pabJ>24SbP^hu8}!g6iqMV!~m*L zI{}8`zO`n+a}&5dVUo+|3#JfPGgq@6Qr>q!We_C%e67a-oPL$tlMq6#r5H=S42;|a-5kb zO<3I|Lq2|pwtVLcKTuW@gzfi%0d$(EdbQpC?G{Fp2vlL+j4#hu(nGx{)AE2Sg`&N) z3|5Jt5#-}_B-cNrSm^EXTRX~M?ERy&l7M;D=El%L->%~7`HCnM`5tz{R%+|;mnJDp zkaDf+b@60#Z-%U`-|yC2%;6!=874l?@ZfyKQE2VAF6UQ7g}@(&>HM$%Wg}^A z9cBZs^9N-D*%%?nvck{IFgCA68W3)6yb_r#DzX`*u1rq-CU7*hA^51i^&iPJbt`d? zmn%Y281%(+C9+BpiIkLZP#%&wKfvS&ufk|)g9+s=W()I}OvWVPGtnp&)#0fIz(V+y z4naipt;qE8R`6%1Y)XOhArdluYt%EcZMwE z$uF7eYK8OVx)4C9z`<#H$OnK)Jh;hxCSPPei_=UV$RCgp=%N+Be?|Ko)76cC^IJ8B&Lt#Kc76~Rs{X{9(479G+vn$ zS-bfEN!kE*l@Ai1e}ZpJeBl`sxOcW2%7D$$4!-O1{b(m~>(T5{&MhD=6MDTr8E_05 zsG$1F0!OL1QZGgBwPDbx zFEoS<`KqQO_*XOAD6YR*4TbE7Q^aD8j@a39FZVrs%@VDtUm=X3`!~##@px*fnkY^? zK46>H2&E2Jk?-8h=LTi^$0rzggw2?ZcZI`6s=`s(tAnuu+E5Rt#4y*fEDfWI)#WHE7lk6?4L3mRiMBejBbCB`r>8-Z7}1wDTD{xT5yYwFb@?r>qt*(?q$-8O=7OzJ0%b?XK6p{h-~M27>uvsn*OD7=j2Y%5I3a|f|A^u0!& zAVm0B+M&-rE3VSO=fCAlq2$V5$l-J-Zcll9EZ(Y}Z!Ce$Y)eD#7;ROXQoFz~x7F>J z^ZIZ}3}SJE#rb(1M{Kf#gPTWdjq@B8qB6BP|hemcryH=8H`@Z$B&SI7_?-1 zrVL;?#$WL#p-T^MHnBSZv`cgCwy!bVE7Q!cKB)Ti7gb}e(8e9`@Z z+Pz`E(P1wZ;%a)QuhcP#N>F+3N?@T@^&hX2G`r6jLUzX3@73*{YUFW8?W}BN7mNAl z6fjNC5R0W|y+}%D1ckyE?~+P>fBsb-(e$6%7$@}wm3%(>KeOrmd{0*|)F!ocr}?GM z%6sNl+UBPEf5;T>6jCOT8Z^3emadBa(^~wJnMQ0Rs4(*}Ge$!{fsyf|0}rGgV=6p$ z18$WvO_ek@gmq%83LvM8!%vbK`MyQvUgj#-C}a(G#VFLw%@@z%@&<43gxpFUO)7T_ z_(&#mx5@aFi6;MB6B=xehy6ECH#ctQu^RX*GQSWAs^>-@=Wy*3+%Zb+R9lhegBraq@PE zO{gp$%o(i8IrYEownt#Tzp+gy$K8+fvxn2Al1m=1dh=ismY8oH8c z!XZ2o!`DPk;;A&y1#IC`963h%-cWRbOJ+9ez)a-YXcE=Tz#V3A>tdq@v*l(!N0Ctt z?f;;WvUMnA`%Kl}A7CeMr>w`2Z|C`?2sAozE7}4eTmHv`(fGvClF}MEC}uw*bZns zM#tcQ#a9)6$+OiWI0s$oAEkK%_i4@UqaRG-MsJhfoaZc zJXK-XGW%c*=e*aORap9vMPNRPy&8DD{E@BxaJo>?%-4+itN2Cr)ZF+V*T@F~C`thF z8hqQn{_2{5&tFm4io~iC)|9wTIX}a}Co&m@1Oth&oz~qQMwX`JcCQFAVyL3yfEond z5yHR*xZh{7m98BP`u<4CA?hoN2+L}`EPvCz00$R6W)SCn+Yf`yYFG%sces`@8EhqlOAcftY7?)gOC8OhegdiPoc7|B+Jy{nJA+3Xi%jQ{XOq82jSX;B_&K^f z?#M1y>k<%gpMyZbzQ`uSP!3Otmu>apmJng@4f=Ouk$^Hg41HU#(-GZ)O_+1+#!(O` zr0Mq0GbIdH#bQ3~P(oWe_*kv(Oaz{- zoXuP{t;tmOhJc#VhUUL@XhmvT+XdPsAn+l!fOd^X;tt^r1+yr-LAAXm5xet8p$CaR zPVTG$v@7T`6nF!-DzQbsz91RC-k{hHO&KnE&;VBPBm}$#HYv5hKD(kAKii^R_et%~ zy;k~P<-X@Jz&<_dHlx5Nh?y2v30Q!0-3BqlV{X8Nyy)TT=r<967 z>_6)E1)VELufsW<&1RjVQi{E$<6b7hPB2q~2$UBR!Ex>H!!;FoM73%swu%0bOF<73 zG<0qsZu2`3c-ZZQC~yuaQo%3Y$jUL;0;LCn$y=Jg1F7Qnxb%5P&(~<2-@qU7RE7+k;I6gFw(@$D3OK|3!jo&(EAz&Q9prml_TMB2itCRiPRYm=BL&f!l;8NqpIJ002KXECNFB9=>-Cxm8&#e zESEmTUKYNiJ@Y=C&L_Dtx&sW52aK=B_&vYCnI1-nVZK7)OP82(b;ol5@?YOPB#~g` z2suMTc;f`bnEpe(fH0II0VH2GAoZf$QGP`*1a?LXGK2sOq&hsTGe`qZf4#vB>0-Sr zC~E?YQsq>6J|jVz@MjV$1eOxA*cR|gH%(0J?8df#?$c{`PId)-KVu&bBJL9@*4J-s zZ;zi+<_mu}C7BgAt~QHlhJB8UCGv+ys%YkGG-&Bl0<{JjKZsL5z6pZMLAYxPAhbK* z#0zWkQ!Q9je zn&_<#4_YdOdF+`Jje%Z3kKZ%FSHEG>aN0r@x2^4uj}74dBm#qqW<@vMUZ2J+MLPd7 zSh@E4aAc3X(P~L{wabR>}v(lenK>X+>fRw%%G{6K^fx@!zBgE=ATc5ALD zgk197(WC+azITi5M*b%llp}X;#II~LPanU^JK!3PWieegkxHJ0j?VZ>B>3`#IEBGT zl}E6qtc66tWr#JqPHl8QQPgUWW&7SJPNtI%rvGrZ6=S(rZ6mHCfcxcQwK&TVjjxuv zz{)3^9`MYcqomN&GPeN>3!9&giwp}=uvu?0r5G>(W-u5>vbq>%k$MBgc#Z0vPV?L#|RA(aGNub9#qmOmB=ks*_DCL*Hf!i%Rf-5 zSUj{h1(SapPyLoOgez_}QLe(0ycg*ht-qiU^HuNaqO$)0`2;O!WUq12!!d9`n-*1zIPcP9$V0AH5F>QoC;ee zbN}rj810!F{!?49MPA__ax|US=ll@C*9q?_QMcEhY;MC)L}Zvz1nL6CHBx6ZvUz2?aSW|~pAKvKR=!ZKh$#z* zi*U0dRzj|`S&q$143~+i(rhVK0m94*s(zqgprqbEdf>IV1yOy+Oy}}NBIU7ErSwM| zn|h?%{^{eCO=>bPjO|m^uuH;b_O_b|=J9-&y1L0g>O3O4_YFf1n^=TeqPs@ets$ zSykRl+4M5%iYQ2#hM|l#YZ0!_u5i@ zWT)5GX6Jm96Q+T)uil+ko^YW|O7w^c;|T&Y*%fmX=wkXr2HVWlA74yO5MMGT3O2*- zy+7acNOKVuX@MXTxgLRD^wn2vdXxDNx#+10+n6nscA&;g{*|?9MDE5FWHQ)z;{5sU zak!6`PiB1)(7C3%=5t)*db2B%CxJ$zE^g{2Mab>+$}*A7DrF9l+N3a5AdPi8*Ft~x zIXD}(d&0V4M`g3pp)p^Cn8mqzP=@~c^p1H2)Xju0H1GOae0|EsW%gFB{06@n}Q*O=dZ(4gXT}4CA!<2$8Vp!r^b6> z6MQbuBl5fEr4mvYw8b0^W@FKpU+!NZ8d~?#*@s#Kghd9~ZG z8+qWq9b5`!T>44zGLg>5bLDZ#%IM6)x>&|g7MZEI&l<)NH=7qwr`zk>TNs{TEN>Jw z+dhF*@0PoC>GTr_y!7b=A|i2p(8+=ZIA`S|2h-=0`TvH5L&Rm%y*1c!vcxXmx9>*=gBSiLh$F zxdGep@>qlh+%#U1%wxOLR_)rn0YQ~eizo=w+x-!U^V&Re11Z>^48<_UfHa^UDA6goj40hU$Rukgkenywjv0AFJLBmrzQwV#1 zwc?zqOc_LmVeitHVgzuP>xRPou~4CA!JF~G5SgzpD%U%Cm|7LrR!g!rwv%d5)+6Ba z)@;L_P)&5Ld&$T(tIYXv%d91RI=0Pd>B86)b?maXXank9N~hsrGm~xRRfyiCtRId& zUBlPwnaC>yc{&WY3X4vyS^lYk4-^Qy%?8QY>~7UG7&GvyC_lqnEY?&3b`$wX_a-#l zKAj!G*w(MuA5ixtmL2~6oP^%J(!UKaav3I`^;IzF6#_kin4{jV26; zCFk*cD2(7WZDZ@Cjie3H$_=v%lZ2jh;QZE6_eVhs4ufswtmXdbUC%zneJq4f$`??F(_<(_ zo~iOkD9+#QIoAwY!V*`A5cnj;0NTggT!7|`{i7o(fiLiIT_h@d3nU~k+Nz3rpfLrT z*)q`|*$ZGq{=4KBH(^LQ7p1plDHJouWHhPBw1W-6&`0lDhc94`8at}*86pCiXs({~ zcS&R`Y?i@tUtF`%UP0Wsd52hR__CUI^1Aryjk22x*efpLUkI2-D9Ry!bhbV}h^y8z z{+z=-{<7=`$=SXRV6qrB2AV7##Z^kR|16`hSPvuT{V0)1NY=OQ_aqj0cfU{W3-=dy zjW1|~0AEi@%?9`=_jmdoazkExPc)(%>I_}A5}Kd?(3 zTcXkVZ9vROMwka@9BT|u#j-BKVei%D1mARM^}OogVM#Ak`;rU^_GfmbUJI{r9s&|| z@JG;S{Oj8Mu6;bUn(bqcW8S@VIP?Z@VZoDKuHnU2OU`1YE^RwEuMuXOb(^Ee^~%HIyhZcL$bGr10)?~xlHr=$%dh_S8_p zJ+4zO;SgW+YnRL00XR$&@%iGYjD9M`xGEYjcU4zqi;a5HEYm5<)bD4D6+^NcRX@`M zJ#?cAx`dRE)j;%)=!6dZRiO4+5@ReDP6lN+0DKtf|EK2uzYhD?-&mXm;mcka1CSah zGe?N?InKO&Tvh{tm?AAS+5OHmj{0)l#l+;QsDxqO+l<#&@XO0Y>UT&YT*+qyn$E}5 z4u}5$BIuyKMB32YrQ5yA-3CIk$MReM5H=cp7g#wAdxz~_)?Y9D*#|sTXTl3?B)}sv zm?5XvA^h5Hrv(rUQG7Fsoj<)kR5@d_amQR->0wt^sZ0VQ7XslPj7^vwu4vEMMAy{s z@)rs{zcP88ir;t20+}KyQAj0|YsH?*k$|?a9(H0hr%>c(q)cyPTJROP%3)zKlRsuk*m-h?;iTQ zlG!Kz+%KDLJvh%~N{Jo6c)rp*Pro}+DoIl!5C#In z`SGMulFlK);kc->)5Y|!5NwJ)?Cwe?#b&H#U!QzGO%D-ahM-s>9O!|l+JHoM4hkrH zZ!eek@A2srfFAy0I?5#}rAzsIVhz8qY8J-L;DWTqxT#6f2(6v2#(KL$JyfZj!|l(`->NU(EfZ{Uzk}R+ks`i|v+0?@OuS z&jDm~$etmke1@ZYGZ~KG{4@0-ZHW!!qcQFjCNzLx1MyKiS;6Vi9^z5K*goB{L zd(U~yQJ?Dft~EL&AZ4TF(i%_2>ExFmOy%e;B8i{u9fJT=Y(G|;I+EL_BAtPYl4HO= z{}|rA>*o$1>h;#mmDk-XI#eI%vtGEBsjaIbyI5tA^fvs})sWJ45Ba0m`~{xS^WOr6mg8{{X! z`5N~3_YI+si~wR>8ui9lRF-9Yk?&gskq3_WCc$uMuAy5R?)+qDi2?a^4u-#*}KsG($Dr)L<)$8`~hU zGX4S61l1bacz+kf$WlIWX|Zrg6HY;}wvpX23dz&8 zblAp|V`h@W>)*pn)9W>7vfXjQfB=v7pz>Lc9s1OEK~1wBn$N5D9e0#Q1f`c&Z`(|@?C7& z9uuLb{zI*%1mgp6(HF zd>BRdAop%XBy#Sru3XMu+6&qY>FOJOcA8-G{ zb&+}duEz=l9Xv&LOEsqCTii(tr-|t*_j9mh2Y=b_{QUu)Gu&#w6G)@kDz57DRz)I} zEPc9IK^?-#zdIB|-{E(*NV@`D>El^ETH)-JVfjF`T(QF##^Yf@4bKwhB_Y`LW0jS| z@wpaW*z61V2NY9Z;BuXj)C~%$@$EdN0T1?}PqV>(*weunefK;f(p|_GA2N?9{75E8 z1B>Olcmybc!`^_CS8k~4(3Dv8a1RI=$%@uUq0QT4JgF7N+Fn0Gc$(j8C?|CG=AeD7 zdY$2j6n!TNeTP35jQz>3NE)X}In4{uF+Gd3snK#yvwW%a<{pClORv*Yh12bvg74x> z0_adgy5aR0J8Lp(o+gWr^hBD2`q^Bi70?)P3*O*d-;!Wp`n$Sexi1uHzc&cVb5a9L z9W4E)Q|`qV9|5;<=_EAcbRL;@x37+=bPio4rcXHHaD+x~0UC|+a0lM5`*ulAq1sgT z?b^x~1L|Q)c5iPyu^FNk`7+-)Vu#mL^?O9x$DG{ZNCY}{Fm>dg>p>hl@de8T?l0F@T$ph12gOG7RC(QabMD<3YCRw%SttpFWLkWAva+%; zwtEK(_`YbsUXcJhMTv_xtKz?YWAV6i?H5$2RmE#Cn;9B%5Sff6CGh&ZiQl483i9q> zTkXFQ4A&P)9bl6cB7O&#$zV-jN9{PdPITk*k$nat4koXn*0$9K-lG?O4?ofz0t32D!n`^Y{ z2UO=H;IPK~g1v^W`c;~r#FH{1RP?7Yn-$_hN@ciSID^8e5o>qsJN@12bV|9uSW}Zs zq9YZM$rxR;>%Pc8t)+Jg**?~T$MDaR$!^wsIL+&7-T8B6^6YhWf?wbh`lt_vEfrrV zk=50QmEG`(eqFCdr#EBrf>g`-`Zj99;d-BXNuGJLv0ulf|4_D-8!%VT(>B~YK-#7F z0?P@V)tN!7#b$y!s#dD6)!Pc2N)yuH_SY+_;f}DDv$8=W@-QBSM$Fy+8Ru?Bto~+* zfb=ut#^sP~3m+r)Vjq7G=%+b~?{c!JLZw!QvS^jP0X6Fb%hhtlAc;n8tG~kL+il-l zQ9qTOnFxE$7_f)MTIcj=XWGi#6K z_wUA#Y|4<3feuHLct&%BQKC_n3yrvoQ+&x5pGp1fzAe5!r6yjEs6o>dx{alAWF}Nv zcqem(to3Fimd27fz2YgHQ8Pg7dGEQ-C>sr@+DyP+w24Y3YNv0L+4t?D#XhMwC9IE= z)#~JFe=1=qmCdDG%OvaVB2%G7)y9WjXw`Y}x5XTSG_P&v*`<*7s1NK~iw(0R8m*}` zE?;k}_es5)2?3Yqy!mEh84;mf^*Us7H^bQ4^~aNF9g)a=mfVq_<$9M7*SH%l0pZTm zC3>Z>m|&%5S$)8Y`WOpLw{}|n;HS?UuHM6`oBSS`=%Dk7%>y{At+hWN8_+YVddbmb z$^agRX&#VqsKR5=`MWb-p~?~6=$=AaxBCl!*8x#p7A2G6Zy->WVJ}puHZ}RYx84|Z z=08p4aM{gQ=?wh}jS=-T_lIyk({UrX<=7G04@;{^W%OBP*^8-A+pr0pJL*}&snTjz z1}~IJS~Z_5PjWb({!ucOjyV*AXSF|)G*&9#oEZ?++#7w1*7bbu6vWJF_Oi-qi7nNw zYxtXheR4RCHKU5T6*TM4kj;6qn76lAbWu9Z#sw&ahX89P{znVwF+sJ)H@kyFPDkw` z?vtnXN2|bIN0k%4!#p2GV$x%8H$~N8_!T99m|dT$Bb@4sUT!vJ?Ed;VwdJ@a?%?1?Np~9 z1M(*Wolb}GdaG|=RZ%3f-PWd$a~e6Qj-$c!g#A{FW1DbkDc}vL z$FP@!ab6sc7>7TBBfdtMO$_^ZzF7rE+bSk!)bG_7MHYok{U+HwW<21&Pe`h@QYs*1 zbP!>eq|#_Nx5?x6dk_I<)qb&2BG%!$2jopGGn@YT9j@qylZy#X?UUoHwLAT*w-a2K z>@P(8e4M)3BB?QS>s8;?ZoOy%F1lm>^Gkw?FlL3n!R5xIN#reK2n@WEU7x4aXHw)?w-QPdu{`*HOLV-hol1Io!$M-+Zv+aFH{UH*zW=}ng9%EUgu;M-w7F^J?Oaavz!8$}Y|+yT``t&+ZC|q92g9vOfEPuYXS{QCzNLn>X1pN!)XC!AV_)NMk!K2;dwtCcRNvUr~Fq4Pg>|0 zSF_Q&%uxN#=Z$!vEfMy!)*wixajo3N>KJuZg8P`#8-kbI`+7N0CN9zcHtg2j^?S0U zIYGOt(mVZ zk;dRal(EPBd~vP;l2e0Hxy{>2YE&%U93TRN$#xkVK81op*0k7kwwN@j!x<|7{F2Xj z-p5GbTZoE&qXq4muurKZE`5L07aFr4!}k?SJUwU&^p=;+{%KLcB$Z6Vbl+(Zk2Q4s zJrixtv34>j8$1xPQ?wJ-1q^ul_Ac%&o622$+-oDSBDnUMl{7Q=Tx+zd_^_=QA4APS z0W(qp#DtsAn zFlI85&MLUe@Wb=>aXhHwIeRUvK5^yl9MC;8ks^%2Ex;vq+3V@F2wSK*Jbx6(DH4K} z(qz+(`g6q-OaxhJyh5H>EXH9TW8_1A42&$6%i`EQ`}sg~@a^hZO(;c5#k3m`D-pa} zZ*yu_bhKBDJCxcU1#=ae@ z76%Y=9@~24|JyIBxLBn{zD;^yW{!au@W?X{k3pj>zv=U&v!h>NI)~TuDO4<*MU^w2 zRZ*e1;%HK2)p9AnUFZe5(ukF>F_^XHR%mjjdWm*5!wmFQMj1UF!T5>Oftx#TIF-XL zH=ORUfCJkp0$FP`nf+9H`^7gta*&eHeZ1`pcVRz3r?~PsQE$TZSil(gk=iAL8i6$A z9qg9V9GWn2IH9$#R2%Zg?Lu{ehaBTn)zR?r$Z|p=_G9eUyh4PF9+CG{xwN(bx7)Bt za_0ptHuz>>T%FoC=?+9d%Hpg zjJ#oi#2Z^0=(#BalS2cgk+wzuUdHtWj)DmUNLoL05M;I17U+EN+!E2Sv zHMHE`{(ovYtDrcdbqnJXT!Y)-65QPeNrJmOgy8P(0fGj1mq2iL5AM$37TklL&bcr5 z{nmY$s$DhJyQlZ;?*8RlOI!shcxYGs6jCztjZ}gd*RP;D5Hf-nT^Ynl5uYjK2y@4( zYId65@JKR_=M~JI|1-8a0;0VhyST*4#dJ7RlX$XRCxe_SCH!^5W*s&SB1W@?Pe9;@ zf`7SGQ=p~K`de}{tNX4qHkrjWol6A|qKs_AiipjRSmiMA?fqhh5uGHUKJD-+u!YPtY$nO8g{8j_0@!e#_iODHnwgQg6ZvoQl?iR3uq2DE|DEn z#OY$Oo3JO#By~zVHqY-(21^UiDkv3{ogIE>TOIA+#btuOsv+}jubmT(tj{KaQFecSp5xP71(ZfV zO^L|R{=%ToFHD`s6|H)(XtD0fY6xyFN+rT?Do5OMUxJmM-^(L0(>`&&e2}xjXXNl*czC8_?e-P*L*yQ zlU1jAN+a8MwVS*mvmGh!WA9e3c9&fi^hn~1sq$lHtt~;~azvGiRjrEc01v7&E67y)X4Gd3)h85 z(V1>uBD6oeY^4pP0v-;j@~A5-H$gKrx<8m3IVe}%%iRvFXY0J(ePfx%1N>g}CRFT< zXD~4054$zWJ)x09JxByCqOqyyf`_3NU||J`x85@~vC3qi#7coI&jR|}df0Av>7c+7saTFs_>HEmS87b;K_zB?#)h-Qz@5ex7@SZ1!)o@sx zFqd|g0;#~Ekqfh6CB!U^0&Oli1qbT}$$*$YOrr#XOrEYmyp_VDzQQ9o+g#~7s^Rth zjx5eF{En3JOq{G5!6Fm-3GSYU0={OQ&M{Hxck+h<^F$-QIykE7407rGJlmu%2a=5r zykqD>FSLCA1iC!-cUDtz+|S3O1HZT92K2uBZOfk_J6wp(mDLH28g=FHz1rt^s{Cl1 zd`!M*!789k8##_!XFK&C=H)?oH{%V!I?#}Z;5JAhg8AR;{aJSiu>fjDsdJ;d|G){C zN4MBIqFK+$Qj2Mc>|UfT+T|s(=P{uCDM#jvERkul8$@n{K38y6rBhUHBUaql*{@f> z#*dm@D9w4S==$A{$fj*b3S;xyQr0jvY9zrhuLf5Aiuk%Hxtl3?A+KgF+${Mu!LprT3?XFUu zJ)%G(=Xl*GFGuZv?UF|u9f~%+f9lk;-I=nbncJ<`s!QkZhBCYcA9Tr(?rFe2KVU|p z7n3p~>@w<*Xw;e+uF+5{7?G|v@iO-9rZ40?pT0W_%-Z7IGk*OH39;2}YSG779r1-G z4P6?%IjpG4YAZcl&MefM|5Nctgwp5A%KQF=`|4o)t51tnysiT5)Newij*1w;4qN)_ zrUN;-${hc@G-aYXXv8pi*R|A+M*G#O^SBGSrQ*y7)ZcWgiTsja5R(Q>Eng>(>#cf; zhblTL&t_HGGl%6X5C{|M_9(QX7(yKkynD}X-A$HF{K;!he7P_Y@hO}yc#pchF02f$ zm{e%DStW6imySTw_0m@$t=ny=RKKoRx!H&kghV@utEx)AGh)3}j_zLlB<1|=x7t%w z8a}LC;afK}(Opowk|mUhTHP$L!A6OdG~G|uy$Sa;p@1@zHq*?Wpdgd zD=HpR(|2~5B6}lHJ9)Z4lbj1t^{NJhjMi3rW4WlD0XBhwI6o;ddM{JM6uFHp4eLGF z49g5$B%J1uGNJ z>)J>WI79X}T@a4VYbVs;V|GEmvKE5i@+o&6VLSoj*+tBx_bjXqP7?|&zq1LH0fN$* z>iX*PR2em@3h&7E9Id`dR(uq2xX?~tb~{=@BTeC`w}yQsL+c~Rg0V}I@7CKRI1AN? ztv|xmb;iI~Kh+ksUt53h z9bwjdVrkkSHf--%8ci~u(iGvBmbOt5fo6(<8-;e}Ux$#~aXw4NL94vw%j@B7zU_oy zvPM~nZ`$c-??0$Wy^vk)j_*7i`kyr^BIhi5N7H}Ntl|KpA(7*IU|@>JgiM+z@a)$o zy6^6-4+vP==(w7IsGHte(e92StDy8mMl1ztKe~8ka(G60F%NtrS3F*{&#loPu6xyl z+LlNQo{A#Ia!#UM$-F!o-*x^v1SMHIi7Z;~Bf4X(kRk9{n|i{ne%gM$xS@4GI++Iy z7Nl@gZF~8CFs96D*Xo@Bu?Na#&TT`Eh}DxcTaq@#3K*Q2UU3S?Ng`7X@fjOag&1cP z%$PY_zn{1>gAd>2W&VCj_wh(5}@V-t(NCNX z*oKwly1)68(vud9ZpWSqs!@F(kYKtF2yZSZP(vbUvl)SHoa>{+$Ax+@x04d&*d|Oy3l!pJq2H1r?JF1BprR zn`~z_&?QbrI0VE&dQE;Wn3NKFKW@oe#19+>vr8m-?xBp5}PV?4k zE@94o9Sdw$jBpB3d`*l9A4jV1&Iym`-IUG1om8fUU{L-ni!a!3lx+K_Nlp|M@@$;9xqwM92OZ`5;VWjlo(!&(^M+#(7d4X zkyjFx4+29Fq?ECgzV3iruon+=I%$2DIq(2?-Epe@?(r+faUVtzfdr~ozOjq?uM@1iOjYCAW;QlQ=f`J%HfvlJ5Z>aoShr>pg%9>uhe-n> zv#9>b*h_>JkiBXF?Po3q9g1;@4WGJ_^Nknc8at!OzB#$MXy@C)G)XI*m@i;Hl+`5w0laPy#=$mii*TkeMKip zXSEhGDATqc-37c7>wNS(}j*&LaK&7}duS@N*=U zrefk|YY*c~qVwY}GXF3C9F|6}Qvp}Zoz5bQ3lw|A=NKo#(jQ^&V^Fd<5n}LR&#Ms* zk>t??c@iNJ&*-#JW~~a~zF2Eua=Nd59?32r^5ocm(u``BqdIRt*iBwlVU9$M31T(9 zEUI?VGf62@t`yCctFF#7eW>PCeZ&fBu^7DU8-`0I+R$6$QoSQB?ba$VjgNGo>tx6e zw3+A@55^qoQb;o81!Y~F_twCzs2weqRBsD|qf@W!rcDya8{0Rg3Ulc1v}u4U$r{nyIX=t|BN4+dC>OeSEXN z2&5G!$FeCSQ)ON7kAg(<2Sw>VCSo?;a39ZI^D8vkuT#;*lH#qLO^wHVu^zq)L7?`) z<_GlRV!h^rmnA%@-Mc7bW8&l+V(Fe_aRP_y#S%3lVZY%I09{`#WCMFbNv zfQYS7=FnGMEXtx8G0Q>}4-O{xC!0pT?||NvJHRm@)c3pB-z8E1VkAtMi<^akV~8uJ zS2otY=b(v|7v`ck>k*WYRbe^(hz{Sw5R!q$850lKwRO#4NduaP0Bw=9ndWJ2r!0+6 z@oV9tXrF>X8t$&UslXQ}f;s`-(##gQ_J~E~>D?_hJ%!->oF%)oJ$kptiG$3i1$af_(=rSgTm2+ zO5Q#?H)vEC=o|Q+ssqiLys%p55=lb553WFRVruv2IK%4F>+z=AI`-r^EuwWou0&WX z>uzcrj2AIS2-H8E>tiL--6h%|>`k0kse2u2{Kl=<*PI%e05uLZ$|(&7hbyN90ZiHN zd{+EYDY|+DvtSSk4Yu+ZQ+yq7{S8?3PPj7}RPwW{_=whcT3aG>*TbFvUU<$Z^FUgC z2c1;C+K@r!GA;wC?e?%rVZjE`HiUk1qt3gD5zu2h(JtpbB&H7mWgm*S6Jq5eNbfv) z@g9kggHrRx?LG~{&myvr8pVQlQjA;I1*dpg)shvOW!A2rtxmp%C<(u|hX~@YHXRjr0_vboim@-5L-DG%j8k=gU_N(VLz9M=l9R0z>SNmGWV> zftxgbMkcIREJj?ajKqs+c~zxM$2DgsXn!Oe^Ky}k-=V0*d?54a%d(s!Qvph~b_bZi zFK!XZ<>%KKE?E||vLFn#f7#uqbUx*nGpcK10KY5@d}`klcfJ{{P@*CQ z)`^fR$^T#=4nlJ*IQ>ArT<084BJ8wekqE)d8yzX}-bTAw{Mn_pp(yz5>tJ6fRjzh4 zBk*T7O;{H_fqWmcANO!k7jyS~uhayRplRm<-=Wqh%!UH= zkMslGZXm>#_u?KN1uyENRp@6oYsjSb8-NJ~>3vS`>9=vI67r<^8k@O-Vaz(i><+n6>^4F1eA?p|{+hO~s?2i37) zDn_6RSGu#zfN#7Z&| zXPcW%le8Yib_N`Gynq9Vv7R5w>i|@d##;Y(GH#tBt+$QKb?vNHS8is(*;gs)3*s#t zLNkyCl`bO4eR^Orsen^mX$8;>u;EIov9-&NX$||qaE8;#BJ>2v)c-QGAt=TdKqJmY zIhb7DP)z44qs9NaLV`TGd1>EMN3i*>5fAKhE%GY$Q#Hqz%11Lbn}Iheq{9m_JZ+!B zhx=il1t`FX2G(KJU9;bi&$No-90x_1;p08-%q;9*?#LYT1^Ki}SmMYGqrT@2!>iP9 zYg~ch-)QoC`vy%rUclO0h>SCbm{L)~+wEh)@4OfEMIxL&$8q31L{ZAQxP(v~vboW_ zrj1J{z!)#_2lEVZ!|%y9661Q&;NmV%(|?SfWQ@MvKJvu7|K(>!Qz55RY`vbj9kil@ zVh1(0sHZktVhiI$cw;wii%c*@`Bzn;5yAh^ zwMYW_;PfOtvr%4H^am`%XdFI=mUPy&PZmz$CgaJ(saRZnlP`CudkORtdc0O%ZvT>q z0B^K?LZ?NDgiEwL98cQJT9$8OxkU=QwOYWug$Q$1$%F6#fw>oBt+P(&3?3NW!+0)K z1b&15b^+UTUirg25EylcW#3wFnsie=cb^JY>=_t!Q~9vQS#}UL6Z}FFb$FVvZg~%k zASk=q)&J+|f*xbDKi@Fq3X*@1el%LC&rqL02>*yEd^SJol#S-CxsuglBNs`e& z0Sca(VNJD5I`9)L`H=jH;~sP3GJ5iwDndv=BDvp_JGM|Z9%dO=^()`i;^tu)6e_};L?1h5UJhv2iM`gv%j)m5k*4$*izM}Q%16rj+)A)VnMU}g|cZ9 z93XFjj=r1!;UC(yN&{Gi{-oN{@OXad9D${83OV2oGLL4w94;S!=1m|>p1 zmaZkhy6vvBNeo;fIl7P&zNK0OcZJ4CZPDm1%yS^&K{za>^N%rr&QKoF%nhJcNFtaf zGZ`L@Xtb$it&BYvMaUD~h4h7|hdgcu1{0~BC#vbxg>#t<#U~h8Na5}sSIq4&G-6B_*T77%6UDG~qwWf? z+dq^M>Ym0hR{P#g;Y<4JqvG8p?LdDRj2*M*gnXjf2S#%pv^=5spGnsHL4DT18%E~` zi#FpYU3r*2aMC4z1trFZ*+?(Ri`a3#>pz5lq1f$s>^Cae=|_$o;-9X#wImuuh|OS%!h(;Nx zuSNvdUsOweFMjJ%!2+FgjEE zHjp>8g*1MygF9R97`ju#51~AtE2;xpGz)Gl`3j}Pxf0O{`2g}HqsIL<;>6PHK7DHT zm6p=_S`(9r1B)wAp1zhBQ0_OHoVRuB=IS*fL8KMg6`tdIBqeqa^N}Sw5N`h^Jn!wb zQ()m?@weIz%V-RJY3eK{5>!hRma}Dp>m^up8r4FRPxD=|}(oHchR?)Tm^&{+* zi*K`QNzCfM+s#N}asPXG^9R`&$!{N@>iGtu@Fd@jlKn~>+23aQ!#l!aHfqTk7did}xnA_Y0V z89$v5{+%7!AeKag3ijzf1pubPn{`{9%rX58<=zEzp}-IWzd-Ovls1c)&nSSzk>WWj znX!Cufdj)Ws2-}#4455V(Ceo3CLDUjm|C6T{Tkd~tbtUuoH@#d=masF} z>-LaAl=7fTco*PG$MN2EJXQU#Usw?HY3PpB3=mfyJD7+_RE%lZ>U?zN%l1G4+`W<^ z6WO5+bUR1wrCZ=JD-?_6`X@`F?4j>iDF-8_;|HTBr`4U0<$ohwQR#pOu6qz4w%)lx zPp#XjP74aTE=~gNXU3QeF6B4PYaNeR=A11V+GyfxiwXG$0w_h~HwbnPwn&gl4?}23 z4z-*L1F{=a4xa6nA$92W7?scahzt$@$J1+u63_dvnw=YJHh(;C*4-Uwp#3o+cQW8& z=sPjupV22La{Sc#UNe$x=ZmI2YcULFoWpvBb#Z0-spg&uWVBlN4P)TXdjDX07{`!U zGVI8gyeiov0bfKem6c|keS)S0`XqDJCBEwqX#quVI6PIa)}j?p{VT+-N%h0y0Qfj{ zgY}{YYzwtqLTPfT=cGUw#=qUsP3-#>5?*(Y&*z=dll?$%xlufxF0WK)A>#UhH$xmh z;^`aU_?4Q%Rj$*9e#*Y8S*!2t)=QzWmLnulNyepc4_9L{a5b!%;^@bRG|pi%7#+DJ z#xBg*r@flL!u{<+{|0F}eguaua9x{Tvs$l4Sel9+9@LQ62brDnYa|vC*gApy@`Lp- zAgxIrP8B{~X-WZvM@v;{bT)L_)L_#mQYNJFvVVb9Fo#`xN&FhNX>zW!kZ-6y^q-D* z!R;sjPq}fR-4YCmCc+Z+^O5^;Vk?)x6$wtxRUNyA!ruy?`3BgsB}U@VcGHR$y3m>b zPMT@d*DXW73!Y%;gi}Pyc?!_wwI8vAYX)>(MK&At+Lk`(2si{VG`v(b)A|V}ON&?u zQ)F5Q%jH06zufc*sEuVafQ)-X63FAXtZJ2Wjd~6w%7MKsjK`NL3fLjhDr81LsTdA_ zCa6m5Ui!hMOvY(f*`Cat=DAEK1DtSrQG?=SBx0+t!OpI;1&h|os@MN)B=`x#r63c~ zfW_Pl_Q>B2!Pymx=Dd|f_klAYcsTb4gYmiMM%;P4M2P?JzB%$dfB?iMHO7J^1j2=a zd#hhO=2vE8r4?M5m4Ep)OSCr)3uubUiFpUXP+Mu>85w5Hi8R zD$eC~wTrCXW`X8{B{=7r5R$=Zsqh6-6P(1Tzp|jvs;*I`q-^;DfQs_)vM~g;nKl#b zR=>0dftE%{O=xq1!!6R;tnL+6g0mQ`$Y2l~+po)^7;tdw?LX8kC zwCe~#Vc(H1Q4zk!i+t8GReFO)$d?yVMey)7eVqFO4s8Ehk4iT5_>f_X7S)dvYl70- z4TX$E367qj`4~nqJjb9y1epJE6f30L1h60#;NIIw79QbmCI0$ODrm7gnl-f4|Z(+CAs2~e^kVDG+E9iD;l_}&o^9S1DWyQ6?X+WOx z*nwxqneA+?rtcr`HE~iU65KBYm@gJM05*UY0Gx*K9C7P-agUJSPuO5RhngJ6Un=_d z!4zcKc%lQ|K|qVi;I(Tl=b)(44LP^qb=(h*URwfK+-dwucuPg^1-g%epTL08VhrFA zM`+0=>BNJEakA1fORr9~`+Gb3B2O2fwOY+6dUaFhnGNq^lxy@nZSCuFixFmUjs&T# zvH|PJ^&=a5!;6IKE{(=0$XcPYX)v=AMQ}sQtwXrm`I#`k?_*NHd5StFWwwyxj0TLY zEjB2?2C%lIVKO@hEIJeGk7j!YX(JIrYlW@cVYZdMbL-f&3b+r`)hqTkdx9A=c*#ez zL5RB#rxrDoA>n&D~H#m6&qJ{XJtqFP*j zul+GZ>q`LrbRa7JmiM$b^#;?_F&W^X_Bom#GnQ1C_Fytcvq5wT#FE7XZMnBJ<)s3i z2<-9xP9_?(e2LRh#RQL(K{+IMqep{%#hWDK82`-DPBrU1+{%aCiX+C8_}dI2LlV-%@?$^XZBG@OM}B#5Q)FzVQs+ zxs|Kwf+3G(rMm!m+VaBqHQX;gO`S#4}lb(az`#qxtQPO%tl>K>dT*(9qkFylwc ze35$qKAY6V5mZ#I3N!6QGqh#z%!&KRXG*$pj5@0cXNyPE>MRT0P6c!jR!I+yu>5lG zbHCj=Hw1@=IuF(Nf%%L+h8~?YW4R@CTF^{H-UHYmusy?P;8g6(W%nVRf+U z(TX(k0**g4dZwgOc8qwTm3%6FPagV~C&(**gUW{-Cs#BIG;JtFwqZ29NG@q3V01y@ zs#)mU(bmn8ied!y9J$kuEz=5ObOB<2Asv>rpG=HGmRNpjhw!W`VnIdtEviEb$IRDT zOYG^%(=M_#tm#C?I472l23<~nYrCh=FMSP?C?&&W2S24{rc*aF_A&D+#o})v$}94J zp^J=*rDh}4IJjY$EtaFjJQZ789B{1!deDcVx8~J%VgNhmPdd!)t5~s zY>II*zLG>u|7cONTN0^v?=-0nyvw$X=kru$@)q$)kDhLiDtKg~r;2|wSVh~Ox6*^m z%ade-c&Uwwgn^hu&Pw^T=3AFx2-r29S-0`iXDa%ZEpp@xf4C>-r@NAHA(3WxHjBGx zj;rAKT4+ZfzHiQ;Px!;H!ob%YGrb;ms7vKyc+NT@_K*x{7r(nPZ7CCCrp4FxI~Uk@ zb!6DDC=W6`p$BG;50==h-`8-cgM)p33N*O79Yl$@bX+~7n_mz?4g?jW=@b!h2XXy5 zWyFYo$=qC`NdajCrZ<{x@g+g*?UFsX&O`bCi_raz*2`zl|AoTm`bON{0E)f5X e{$HjGe1k??sbUmq@BU|o4kah8AXOz{6!agu@D-~7 literal 0 HcmV?d00001 diff --git a/docs/img/G11_motif.png b/docs/img/G11_motif.png new file mode 100644 index 0000000000000000000000000000000000000000..1e25240932aa6c2f2d7692991cfcfe20dac04d6c GIT binary patch literal 27738 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 z kvaU${0F+&bi7wi`d>eSp%kLwtMfj^tR42LoA3p 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 C!ZL^e literal 0 HcmV?d00001 diff --git a/docs/img/directed_graphlets.webp b/docs/img/directed_graphlets.webp new file mode 100644 index 0000000000000000000000000000000000000000..caa02321cbbf5c5292f7cd316b5297d187a11223 GIT binary patch literal 40580 zcmV)XK&`)0Nk&F|o&W$>MM6+kP&goPo&W%_y8)d6Dy;$<0zNSqi9@0xp%O|>Y#;*! zv$uW{JN*G``M?oUIdjqN9w`Q6{fGMh?HBgX|NAi=oBGG?*Y^M0@0;5D_W#7Y^md1p zPl^67{qOpR?nn23|Nr{_=>LQMiTO$L5AL7b1Ne9GPwt=GKg55-{`LR=|IdIA?Vn&D z06&p`I{$b5tM~8abNc7^AM}3cKWRVZ`+$EX{+IXp^8fxv*dP1%`%hpG=6~dW`g<$? zmj9vt5BGcMfA)X==lUPspP*mmAJ)I({(F3Yf7bN?|B?Uy*aOu+rC-oLw*IR41N}?; z&+A|I@BCloy~+GLT3{{$IxP?EmI}*Z+t8(fR@YKm7mvKldN=Kkz@qfB*lr_>=oz z`fu-l=Kt*fi2wip%i<5@|JeW3|AYS{|6BY=|L^?&pkK!SnSY7?)BZR9fA{bI|M`C5 zKkfd1|MmLY`#=91^Z)3N^;iAR=jZ!!jfiSZ`C7u@nMFU0{z*UDHxmK0#GydzA17$jGR^AV<_%Lj|uMxdV9;?)04MP|WH`y#g(Z!B4NOAW|QkJ|06BQQIYYw5msp z6$_3AUPzB^OxdYGI|=F2c7%0J+7WW_?S6AVP_d6GK&ORaj2C{6<8QgBEgXPe0}aaI zZ{x3J|HG-@c45EnA1j-gZqSaYyFxmq?Fj081ClxzWBlSxXOj3v+8BVzK<$job%B#9 zH!rIwr{`967DeHVOoF}G6|(bk$c7I=KR)gjzYJ1k^EmcVZ8ZPLwQPY!LOGI6i2tg^ ziR-j>m&0eLP1#RH(QH7pv-MHJfONHG{dl|<#^9MNa+CzS-Lf?Arfif6wFCaECQx|X z^8z}?I`EF1Ye=^DaG;A4XY&J%7B0(5jc_vx=-Zu%Ysi5ftlqp+qg7Y9PfnY(4rXT9 z17;+cdn5F9P1+IAyu9dX4y07Z%a!o_sD%wc`Ko%T;Xp1(T_|N~RV$8MfqFA2$~g8VU%2*~Owfr!^G1Q;^M2s;W3j)Hp@~A0kE7?x+%QdU#_rf|)IpJPhU^ zmVLMW0d!e-zZ$ngb^My;f#n6)0j%5l!WB9#+3C(WhCNt`njq)UZ7*4Es}o2H+psia zf9eW9$L6t^B|8*gjr*p{k7XkH&d>b+%QXjQ&R4SXC$AzPIcz`6U>g@^qT>6#j3?P!-FzT8J4GsxPv9_F4^K9sV1hcIrYtLB+Xr3BqHc5I=we&M^xP56}eSn0p7^< z5L3ktQvUkrqm(b-wUHH3!hVu2-AyBwGJo@6;b91e;O^xUj3?73{?|0zys*{kmn_5^ zsvZdW^yK|XmCRh=jHeY*Zv!SFEw6yfb;Pc@#Cl#N8=|>dtz_`W z&|gZY*jn&Kl0R6iZtACpdEiD2d|8e`w9b?JY2ls&yl$QH}0ar9sQQNp-o5&=i#$XTIJ05 z;nnmavLLPc8NBuK9hSn|qbmaJUUP@G)w56Y-TiZBD3=0e7j}Ad-Juki*e?(y@qm3Y zsjm>IA_JR1q7Y@0lhI#x0=!jJn_ym2n6)bxMzO-tS1dpX=fdNl%~Gl{B{46dw>+dJ(5DhPnwBzoo*1mI__mo2%31y#>QbgH54g~r&R#oOErG1g1<5_-!x|A*y3 z)hqDT@od5EZ)YRMv3V-<1vy{}aMcS6H=-w5;b&rOMyY#4j-{XY-n&9NrtGPCS|WtS zoI)EtI%V6WL89%I+xdDKD=Vd#*nT2iXas_rJ1)X-*Z;Z$MxZA|d&p+^%i+NsN(6|x z6vJ?lP@C{)4QhO*MFInxLI>+;dRjZ324a>Fz#S(Ov|C&00HY%7ghA!)M-D z+vK_Ia|JJ>s&3GZsk=ftrsxJY9%JOQF-DCa+(7_syaP6RI}!d`;50-hwEXC7y>DOA zCgyVk*+t8od)GwN5dqDi4W6AhXh%VEvdV!-?O!gVvp5t&eOC}OpH-qP+4{gY?6~*~ z(XPh#&=LFwqVEAV5R%^>l0fWrg6q%`UTM>lFmq@_XQxft5!E+l3BTgCiM0>9#(Pfh z+uj9pSSojrW=$;e8$2UQi=R^$5BBo$iZ?+ zuchX0U!zj%(AC)|l?8=lOg31^EqtHEUV7bK4b89hBSTrm`T*l-Jkdf<-&KX>=GxB# z67+be^LPsOjrzVR531}ONPH2h+Zs20l~nmD?y+t{S!f=vf0J}xA6-av`G=h+OfEIL2#uAGSROJsuW6A`+vmmL5~+{kDAdUr6v)}vreH*I9^My71> zqpxdn;Q+Xb2Pt*>{8Ok%Hw$J^#lN74oHf)>lRBb)#QPkgzh}P?UDTb{fEtnj&YrD8;fm!)HZt8+O8Y+^(Wa>s76J(`_*j11m776*BB2 zubr7%NMs#mTYX(^OGA_rIO@t2_kc7bt$Nf{bi@+YWa2@zTbffQ*wWrobC>+>PJXJ$ zMdA4k^>Zo(VVfla4=&shOmFPrBfEmXr7j*hyupCLiKm98gG=K~M4~Qa^ z?1A^hn)F+S+6pR%R4Z6^9UUGKaqzjY6e+nXp+eNGpxz>3QuDSkk3o6`_4{dMQnsj3 zPPnfY$TnLz8KVYj81=)ydIe+QrzXrp4ZflrHYdz&D+avFyTap{hVe9!7?!7H4i zR9$2Q8m~>uP>-UKN_AB3Af?u(ZS5yKXpcHCDK?fMXB0kqaVhr&J*i3-3xa9tUov#l zRkR_qArS$);WuT_VpHi&0G=~MjJXtx9x#g{qE*-SJRh;YOg_vvOO9ZO>?w?2Z})CZ zZ1xOj&__^J(*B+xC$KlN$rB16pc3j2pfsRoETm>tUikdjuN!`?aM!2 zTA_f}HCAFEqTt4~k#B`6aRG`cQ+9-PO!1X%cePD1!hZpQz@5mqM=AaP;T*D>3LL$=Fo=EPMfqNs&3GZsk=fc0092} z@8n@dl-HuiCTpk$mbANjxmuP5uM%>kU+a@U1Cd`q2;4vvjhJMi_}5?%Xcd_qJPPqFv52_s)=D^s+h+jc}x-cG4XyIB`c}5OYVn#&Rt0;R2F0EJ%!3BRZ26Ol#k9Kwjp=1`_NMAX9Np0LdylzGK3rl0&gj4Td6ykkD3UOoI;we};o9L|LVxN4s+$L%OhdzELopK>tx#3C{*L zL$82+4Y%j>y0w?V$O-i-1|XO;Em~$LEb{&!<{K(S){`R6$yndC`{fU2fWiXpvKd*& z@aP-#uDED5M0`$aw_OBSW5;9IzU<9nF4q9*H z`Z#0xJlZ0mg=7+V`OR%ytWSKX{cf39?vuJQ($_*jRg$gUdp1Jzekd7~3^-e|BR_)$ z19fl~lUUx5=a3|ffgv&`S`mrUB+}`l+E`AtXF~`K>W=7ee<3-l3~?9qy`@Is>`JW) zYvC#;&G^q+tAGo!{mA0#wY+!Gt`BeWN?fsrp>!vzRmy$QqDU&JHCBm1p>b6LJ9Ssb zK2WTPIG2;a^Sa9d-tY9g`*oP}JP3$OV}d@VTlm1DX7bHJ=Nmoo<-xo7I0qA`nmn10 zx+&EvoQF6o^x06_OxaCOcR*#zGHSu8NhjUaM!w?N%#wdm0&E+%zs6cVF7<%OHzGzL zpN{Bryw0#M`GN!s5hhYKn(QREm@hS5^XUa)up#R)WUI5Mie1W)X6s7-p?B{bKhj#I zDW*3qd^MMioKLl4Tp3nb>=$2;^P4T;m^=)7Kc0nYYW2SEZ(%zHfA8Q$*F+iQLhgBx z8+K<-BEt6^VhyE#EKJ3@;4~ufV)orl<)v|JFJ(#p#TtHL4~!XRif8~L(8hREaAmeb zkW^xl6){E51q`LQp#x)4UZuFdyt$ii!zcbK;7as2)~{_Ky3=(l_u8Gj@)p|950M_O zs7w#MEIqSxGWDveAh=7OjEQr$_z-N=Z0^0;^R9)_Fe3HEDF~3O7C?L3y%g5G=2jN7 znKmBXy0SPAR9=n#>zWlUWeK(nlYB36$=JpQqwuyT=(w zN}zPu|AaUB$V%DW471Ik-Zf5i94+==3e3M@W&N7j1#wZ`c-JJN-2h(I2;|f7LyoqX z)zHUf)wT|>>H(>kD;3O`$k%x++n--v3mT^8zw=5jR)a>sxz+$vrFd?Y|5PN0H>WX5 z!~HZ@uA$@BLu|$}LYb72J)S^!SczW>kDWxhp}G?0dDEi9I-UVH^Hy$^(l09|~x=ZoND3?=Ou9evm8 z%Pie*Kn;p7$;z94cU^2O*2z62p4gDR_7A|5-se6Q<+k>47iJB;tvH{WCQ`eh8tLTR z;5OiAl2{9wN~dk$p9O!VEK6uQr#JQ*Pd=s}Jnm1`2<>KB=nBe+-ahQHAWpqY8wEuYYx5 zPSICxZg=C$yQ=gEr7al^m#zJ=rED(`EVGBf1+=%SCgaGmKI^|n@#QsXy2MX8{Bd-P ze7pl&_IFyhCm@d9BPxEdt}tu`=k-wvF?NAFcU5wXA@4goV=ZviBiO;q?T+T z%Bnm_o?+(eVq+!2KEta0QYiqSP8Hg0<7NO9#PL)zZjN`1Q{a%ocp}A&)s&Nre)pfz zx&uW|cIA_DBSm2YKOmgNsP|a%jOUp_5IEIvD)N0Bk?^FH!)~BRBzh#_V0&rF!$nj* zS8%8l$@&WdAD2hhg#%^bH=aZGA2mLyO(O7hSqBJT&G|OrL<=FBPlj2}bbO)sY7JGf!vkSlX=0 z&uG&_3nm{LC82*z6gY2Gc>ESvM=xccMV?67-bFTCrMR^T1)nU{2vHg=G5t%@oRO~3 z)DAK4aWgUHH^f&#$YyUjchyYX?J^y1MZ0AGE0r1&2SD1?n$IVus$pIvS`i|fvRlcl z2~*#|+>66flHz8i>{kU6d%IxIZjGn>Dn|uUqvYEPe5XvUD# zma${oVv>M3){O^?TZPUVCPDLkMUpbVbhy%awRS$I(K926{e0a;yM^JDOjnG8 zG?#&=IH^j=y++CRKmWqCl=>+~vJlII1s&tPLwAM!7TVQ{Ra*-;O~60eK9wJpw|>u# z=F%yHij9-a_is|$!P7%z_Xa~YIHZmWazS(I*3=R>92uoZn(98x@x7Q)*MM~zS;H}Crf zSDXR7@i9S7X5)gb@6EpH_bYC2xjl1MO3|tmhrhLYSb|d^{2E17${GzvGql3feL>ahC;=01Mjm zR$L|GZop1S1>*E3=Wv(`kTxaYBR2p|*pijsUjjy-KjEfox;xHlXLt|A3& zzV-mmqa8WS#BY*5lKHF6wO}sFo=3sG*H5fd9A0Ce+};|~^oUJ#Gy#Ar=%FaBLOC|A zG8e5D2|$g?iUZ{hp- zCo`oYdmC51M=SIEx)$=^{+`A;LA6MLN;v3V2=u-FO{v!GRNa7+c9wiSbO5YOGHaNi z&+G!!COr)KDX{8fO`3IQ8Ebe1@O8!Dq3*Z?VVUemAE@!&z=UnruM}VFryzTI3Y{T* zn<9RNi*wA)&O`U#cq}OHuI4bfH_tc;6!Yb?V`oqtU~h# zOYq+9eZM4;nFf+jAWxk`Ld=)i=lcXDY)0-XwRsKynxmX_P4~TL2LW@B4HpdpN}!Ex z@WeloqdnQ_V$7GY8uQarSQue{<0fpy@Ii#4FXQ&kTaY5pIQ5Cj_*2Y0Z$nNj zFK!hEC+sr)0nt8KpnxZgC-WAG5NCOk@X%ZCGb|~B&bWjOm_@*{fhpm-!S#(J&;;R@ zQ_IJi!{dDFS0vO-VZ`FeA|NXRr8xMCkc-wh92w8h$wR285l;`L1x}Zy%^NDx_xXO5 zSd_8Ff!V8|;(FkG@1|^F@E|BCB%MIzvjH;Uc zQ87`Fy|iGWgA+pG`6Mg{Z}i%mC@K1Eb^=P1(Q&C$6# zeiZaC4|){jbEI16D>csPp1orS!lOg(*BQ=6pGb)npm>!9)kS6tuJ!S+yr8Huf?!!o z$~W#Aq3j{SWQE0Wr$gEuv&w`OP?N3spZ-&>rUvaLU35ISbp&Q;Wf0rDbor#%NCW0e zsrTnl-|Rs-+G#s4T=5X4*o6oe%ZgwU?KOsGL=-b2JEQ+6?(rhNJqi6!7vm!O4i7cu zLopk^?2DWfbmO|M6WHZff7#oUU!;44-HRh6Kb?Tl>(fR2&~rdqMQ3;#|(rj>>Iu9P%C1uUvXr# zzQRO-y}<6Z(L7LMTDRRjWIB zwyuffyLcK_(dH+Fvy4vyMWX%F`R|dQvOwE582OHla^YDjx!-xMYnJWYb9ividt{xG=lVf9qk`0X-$PHzFVIT**y(W%jwxD@(2v}Ay zThFd9g4Qg4S=D#=u@;qf^0uz~I*tsw1Ws1RrZ2F5NK1)`Pdwe#Og5@&ZKMfKB`%Nw z$_kf-(im&heH*&k=s*Dsn!{!FXFJs@2!roqt%`V;{aK>gs5Ru9Zm=ziHosc=vR&v) zaLIv1%=gr0I%ST=l(W3~0AjxE;k%en(PF%ZMZ0HB&Vf9^jz!NeJP}(-YE{m4UkKxi zPO24fn;n$dJ|;&>K*JiyT8mFYH{$y|W}LSBfQeLRn(;C^QU(~-Le%P4=-L`HZiJC8 z_OswGMd`=#qG|Z}AeAYE71m2MVhfc9xo$Z=!Khk!k5bhK1LYsy+`*`rx>cv7e6RXw zZp!Im{&n+^KKP7nxlI?ZIO9Q-d8V{AbNZ%?kHSx|Xgj#W_2E?3%}PYoiwAJ64lKUF zQE%y|j<*#-!*tk1gSb|Q7GGc}xAfD;TZ*9Jx@Wf<>~ASCQ^1s-Kx1)LS?j~%c9;-0 zC4zu$CJiW^zrAQ;IH?L^ELEod?pHbN(3tP9X+E;+2M&h0+x>B>jajQxY@OLy-I|pv;z87N8G0#(UFnO@0k+-bQ2o_$Nzk)n-QPCi z@706;agDVEa6s+>l6%g?d-vJ5l^w&?*wZ}YY!8M!L{8xS;&^CB`@LJ2EVpPOVRl*{ zRp4HEj?#QvV@tx(b~b$#n4twTD6sn^q)cm6d0`9Ka+aBY_yP3IFztaF=_eQZjR?BSM zdom{`zU;-`xr`hFd1i@$nLQB>$^4iVNB7&|5%4W@lD6E^8lsBrH3duZjc`B`^!ICN zuMYgpIpcnoY9IYou_K`b(Cr5SnE;sVd}@uC%wyx(ElgN#22~l{0o(IH*Ha|5#N3}U z@y1yrCg2Z1=P)il^)SluNyE%K2Pc{oHF zRsQUR%U5t2~1+G&xiF4Pj*5^_Tk`zk#9Dr#OO5=HfKtU;AM*O`Z zxnUs7?m$P9IHK%u5GA#8PBECVszO*v0w04$ojuCml=ZcZY!tHfgz3GneEla;fSVBwvLRuB;N!EjX?h>;hWHGfv7BA3 z!lIN_qGz4z<1322cOVHZoN(wV4L9FQh+QFkHxYxa6w$hLmWw`L14KdCrNwpnypAoo zRN5TUWhj*Nm~z2bm=ZGRFiYLdNl<~!bVi_h!Ur+GYT~Ub*fKTk_abaSyA)E6{HlA%!g2$f;QdJK7 zp^ISvW7YWJ((D);!<{!Iba$-4I%aIvP?fXv-Nr*5!QUN;J8=H!vKi>eAHi+_?4lRA zY7KEN#|-qvQ8_KbpX<>ivnd0J(_mKY>A*sX!Wn4)1g+Z^PO0R*&kU9~xQzaeFCDp# zZ*7v}E_!C|O%x>&6XKZTPfo3uzru)fEKzi?fBvtocfgso`<9f@&u5GdWbn6854|YV z?v!I%&|Y%IDC?!6N1hmeZB9aB-AbjvWVKU5FgcY6;+0UVqCapKWT=o#={M=< zErI(in0B~VlC6_5*Sv-gKgtf52rd5ZiXDb1Og`5qSUUX7-3Z7vWSSxN;p)@h-&xC@*o?P4 zm^<%?UO?@@u~Zz1gXj(V2T8vx)9sDng-jru@EEUYva+tMvduxv+oO@V+CFuQ2lcX) zF>;~PEiy`kpWAH~cQ!`w>3_zx#{Ha-1b1nID;#ub=<>G*u2f^*z}6w*hw2Nlpa|!U zrDlL-M{jsvqWpcKV_gL*4;4+2Alhh7=8K)ZW@r*URr||*;z-BQA{0sKO=GZmI3BxW zdxMxW{=@t;%>%fFj5mz_ebxl2`$?6hTU~<;fM=}HrrG>@{E7SW6t517{lH{ofzpQu z&9p8+dJle|nS6`QX+d!e?eexO=!z}&JT9y!J@ts@`8*WgtCCY>DDhEPl#L4uDGfmf zwg-&y(^as4Wh7S4P{Y=kX<-)822zH;+bC52{TA(wHPQ*iA5Wg!l3d%20mQ;7rQL3K z-f780Gh+6+V}JxrM#G^F9)1UHv(oQDQ6e3CfK+1H8cIAp2^hz5hMcM(7=tx82 z+Nyh*9i3~k*q5bHFm$yJ_O_4ne$F=d>RW{>H|QXWM}X0PW7s(&nCZzwQmM-Z2pG~d zB}88cWm>Pyuvt52fk(KsV8&`Wl0UA@-g20mbZ{va+cO5}ZUqG9GPumhF z5@uNDytLp$-gaI5COOs8r=4}x+VaHYN)dr*?&7I`HivP@)eAa2(@={pNh=^1>G`eK z=ea%+gE#du(md-4{;-NgH(7b5v9<~;JF1389XaEMfw{_lvHrnM4=v>~o5!WFq$q-# z68?`%VMzsByae$v#U@4-QobU?fC95mnQk@X{&O%aUd;w)!2Sh7+L95J71OQYM|rrw zL`*LcsSW|H-xIt1rz+Q=|4(a6z~h#I75c>IiyIAuJuQxyfR~ArNr<({-Mv`#(($}) z>e<#h*fE~>HyG6sA>2T!(<_u2uBXeuu zq!$0oyfZuq<`0EgP3Lf#y|xadFzpe+Sp1$LhT z0ivU~9`^db2aAgZR$=sgJc*qS zF0}^p_a;R>1?utZHb>@3=+c}l|v!i81{T&d3VIwEAv>PbfntNgtRM)f{V2^w%a5Q zu7q9(&`ORFj9qpiDi-Wvm1|Mc`|e@LV)dQ0*AQH`C0eN3Isq)Mu_{YlC+_!05YJ1E$P9~$`zZE~bkFj){+M4(Bax-aOW`%(p41l&;tPf}8DOGBb4 z;H_re!-Qad0#lqj9U7+0K#H>L&c-D~MkR`6mefbo%%`^M-O=P}<{`nbS;h0A{o9t@ zG%3(4VnC9+H3$#e<2C_7-;s)J_dgA04_5%P-gkGi^@P|{rLAQ^6?v<^?z0R7e|wB4 z{l?%|7NSdc=F#o7rX=@K8-*G|9Oj^+Hm?_Gye=bM`wp~5Uk6JOwsiu2 zA?hThPzy{kCCc>753DZhd|haE;Lb4Z* z#IC?lBCU1lJxrzFZo6+GB6&^E2;wUfjhm)zzM=pgqMlnZ2K$7zYou)oDJ|d2%Ut%& zRXcu+sG|aKfxS&TS0+P-OBsa1f+O=UP|3~a^%G@{V8C0z5T{e)+w@$iBOU~!oeX;nsH@#u3!RyOrAzo+&gRmDbu}|ABLQ{#`d04Y%jq%_n*lw zH5ntcr{W^kwZ3Xb(EuF6Bg)DCh^oGo<5&>GAiYVPWME?^E}u)tIv1m^P1PS&_N%NsG3NgW)#5} z39zd&f7z8{{q;f|)nklhaIwF>W*)moF@78NPl31)e3>u+Z2FB(e>R`!D z`dQT!P)yKm8$ws+4#1B)pax~nt#z?Eph10Kwnx>RW$lM1xK2j5e3$2pAHM^PH;cbU z?**{0Fx#IKI$Ac$#Pz(sm}Q0dJdq==BTu{8C`3XpQ^tLSxM`&ljS0E$;cLrsa~SBN zbh{0D2&f%o9O?S=yeIQj?R#%{*X=bGdmsAbmuhmbC}x)_M(6k3O<(l{mpESk2Tefd zq}ldo;AcDnU;$sE`&zQs+{hUR#Kz_D6vmoYD1T=25)7H&m(4zC=;!Hq!D-<|2t<(( zVp>PO5gbQ~sJn(<6wmZG5x@J!M#?h25K;o02q=odK}4372-}_Hv@K_%p^fl_x?MwZje=A z6%$Ub@ZzGGJHi#Xd1Xi)Tp%<4jfU^~rMommG`j|C(CfE|+TY2etutWnq4NWnNQV}d zKIU6k^y{A;wJZG3L&L7~c&L{7%2K#^`;B)L-Ky;SBJ8&3Fr5b8aV)1k6T8KWfb#ya zA}nGh4v*?mu<|AY7{gK>WGZd_P(|OWUr$VOOGGWpa9_Agr=Bp7IK0zS81*@a{ZY|& zzX)QQWBplJAb`$1&of*~)WzTIB_-u6+Ixu0a)79Pxj)69EsoC z&7PBV{P#ffF9Rt8_43Qhis_x!(> ze&Dx>e+E9Le9Ki-SMC~O;3X)~0O0jdXf$c5cOVlyfJUu(5f6#tqUvIGF%|lxx0Kk2 z$py^YSn?_%^ zncKpEOl5*1;TxCJRg@nefN)GN1DYhJjK`Bb-X`>>KP)g zF5WMCgJjpc%o!C~#{tQ~@6&use(){iHaylFn-Ny|zc+t`8+C)t69JyoA~?RYEXA6C zdV=8ev9dNzi-X={Is5t#;@15gKi9>UK}?|Nbcp%g&MLf`ntN$}7i z8(Ec`;XFIgM^!-p#S&B2G2DtTfLW!=bO2RtP&a{vo>KUsAU{yXWQ@lKkD@rj;dFDA zi&Iz*hpdp@;rOKtR?m!rAik+|(+k7h7yXVULr=uWUV z&0h;zdafA`B$?1?=C7%aI_(JUC{Cnu;n9#CXb__zRQaXvu-7;u+4--s1fpU{_p?9G zK6I$?fq^DJ6j$j+^Tlwh2oUQ+>I+?{qE3`nRvBqD0*Qy{XV&>LAKUwkfJAUsD9|>d z8C4AAJGE!oueklKGvA;_h_DfC3xS<3c*KyI6DX|b9-rPEvxSvKaX}~;N30PymB9A%MTHm zfkiwSLE!b4>x6SPH6qVwb2Cs!FcUl()gxP1*p8t>#+5_>-=LL0p`7Ia#{u^KW7!i64@ zw;i2HN|aX;UfA1B2U7$@Z`Gr=q^8a0jH*Hfbs2$B#w;9GuAg_=16&HwC=SX($ji4{ zr(QUhKnAI+l)en=T__~N@pSSfP)WDZ4(hO{-I%lX)QR5>^~)@Yes0w;O2w5jUe+Z< zoIdmNt}Fnaxz6pO5<-8KToDw(pl1py4)~nnz78q4YHJc%pKroJc_m8xa=|{|BM%tb z7Q}i-P{kOx)7Zlwdge~3BdgVb;mhTK>*V$R!crD_pFg4q7N$zcMsN7lkAlNZK~WX! z=+Oi|wcYj96?|D036wh$2w%r`jhqx^tE?DA-wB>H(zJ~YK~AjS>`vUYQ9{yPyGSbN zBf4jl?Cpe>wg)JP8V$_i;#fKze~bWfJGw}E)DL7&g#-FFUjnsM0DLeryTG zc+wqpdMCm3u40P{3cP^4_N(SaqsWTPAk+8VTPlbHKhC@2s+?SV?+Y)V0; zZu~X@T}Qh6;i0xZb00q9@wY1YF#Vq_S0?Brqcw3Gxj&IFuHn>dc$?~UH^Xxm02aN_b1ff5?}&?7cuMTgd@<5$e_p4$`LNE51f3i9dJcG#?=;7Y z&5A+3Z<-vcx#h-vf@48tk8T_%%Iz2IqurWM=Hs^1=lpE=+|w(EzZT#r_xg$XE6E(0 zrplFSH5nXm*M?b;Zm@=j#hRUxb{{C7lnssV6fn@YT81lnIP4_-Fgdyk^LdJEWYNs{8_DwLD2dQ;bqf_;g?jlE!r-T1hcYqtB-s0 z;&-OzQSCXNr-56_nCIXlP~b>1=;H4ub!3?yhk&sb$y#gM`gaUttdpL0$kqr$1bQe{ z$*kx=*qkXGu1PuE`o6)VbrRB?G~>zHRZzwfRNlm=gPR^WDY{-gGDySL1%vubyP=?v>g~FKf=+%=#S%%ZYH;3IF!7*lmQ_Z2#yAfLqjQE?%2*WYWK0v4iEeAAA+j4?2&uK@@CgH`sld&kP&`g~y_)+V| z(6$Tp*m&GX^_IZGT5uI6%#9uLTq3m6A~beoZL*}m^DHav4C~EXhm_BSGiD*ucpc~UCty>@9lwNy6oN0Ls;QK6c z0S7c1ND#O-DD4T{+ZI4Z|6u*bphCS% z>Nmi|KokcCnZq8CI>#tFW&>%>FB1=AX&)RQhNR1v;jOAyLElU^pL&(Oyk?df#%S4y!BInQh61wgk66kSs2ux%=Wfi*=u#xB~_r? z%oAy0U@~1mM`vaGyGtf8TxrmdY*|KkCy(w%78It>aI^w!mfT6FEf z=GHcVW?~2mF}JfY@!l^l8xKwk&_bVZyQ{@r9<1QHoNn^X`YqMcJTWfQ)fK>TPXWS% ztjC%K618-a+1I-34yO)>5Tk@!N}Q+|Dm)rU2>ZSw;E{}H4K^f+2|||iX|6J&?}2Bu zw{}nZ#?<{F$5e`WKDf_-t<9LnVi)=8ylI!*HwAy_#F?3*UljYaWJI+qyzKkFwz$3? zHsMoRS74%)$7mXeD~sXdZp2`>=}i_E-ch#reaHq8P&N=Vn|{ zLN7TZ?Naf{xUJ(5OCz6{CQcvO!U?OYFbrSz;~(J6Ba!2a(Bu?jbr6@#yPz-DKB!Ij zjKM|bnAbH=O2Ww2Jt%L*?A730OVGJYz7-qi=}~h50cJwwDz5I6e*jBBw7)0<^iz%V zd%Iqih)?i)Rgann60cf;n#_ny?yQ|~r_|&iAHZ6UyMk4!Lf&wLbJ7G3$S*QV4c0?z zcvsBbLC%>?q-a!MoGnlQ5L6EZUAHTdL%f*yn6@ZJ{E+-UmMUyif=~!JvDj;|7w^QTvGHm(^f&puH((dbaV;2;%0 zn>Vejw=ly&8<9D!fQs3;0iR2fvU;DHG6NM^am0CqQdcuzfpU=PaXErxdx`BWZ6YHt z&+1WJPd%hBoDrXPi^G}Q!u#vp{R}J9HKFa^QWpu1A4zf8;Ho0mg6Sd0-c80vMrb{n{$^{ zD>F>^klsI}NM_8tW@_Qy=~3Dzih!oLQ5eXinS1gb($x46CwwmvrmY;|)#@1^y$ik` z`AG_|&Ep}Nvp^yk?GXIfR@Pi4Gs8+~+B}hKJ9L)nGYivavOShXyK|+s&$DIs0bxZf zjd@m1FFI^{ESl}5Kx+xS{iaL2bs}`=&P&^&o9b4wBQTvljU#J>JCEIe*F>b4U)1b8 zG0*1--+6HuE{rtS&RVYC?=v0=(u>*66`~~r^(H1CV_`C#=e%!_$gd5)z$y1m)DrV;E6C6;8R2Al!XO^W8REHIdc#o%J5R z#>Lks$l0*Mg;rV*O}@uhLWLEo4aGMZjA({6KnFXJ!Ka4;4%Y4Iru-MFe zSMpuC0%5LAJdCP}4qbac&J4S@9jRs{hY4D(inB>n&;Ju?mM&}~uDDIo?B68jy>v{8 z&Qp-%l^98-KG?ADd8F)L63MK0Mci>ZYk@e;$?%q2wr9eP_%C<{ytRmBC<&*V;FL|3 zfifV2^$8?%9)%C9l_;(T`Oz^vt)+_eR%Yx8a1c;tMeQh?%2luIsL7mMK<(u&N*q>D z9v|0B@dlP@UL1~k6;#Im^*TF7O|?z5enNB9Gg-Ji{$z2ZIrT9fuG)cl0Dw)3|f>gxf@Hpjz&mtJ85`>#;LBXc8G%DZ>ZF! zgFVMkeT`8wG9A&lFXS3IKC7A^uLM z?@bp;Y@#W#o@fku@Qt6;5&87eZ_p};mdHk<)0RZ&mOl)Q`50;@I2)mOXpirR%anr?6wg=wm@LCbZGpLkEE5sVAlHP%&_ zQgA?F85TWaM@uZ_W0%nvrg5aBU4V_$YV}Sp65b+kHqwzk5!j-XF8LFiaJw8SAFSVxa zk}(d=ywkr28y9c1r_Ef&NP67Gk=muxVCVch9sC8W6qDZ?Zlc^A?#v$9;lF_|YWMLT zpB~U?$?HVVWjp})H=GbLI6!>-O=16WR^0e|qLi|CLAPe6P|II%?8=dPrBJLZ3}Rw# zMk*bas9?D)6ywiY;sW>WsP}_>Tpql`$pLS}LAD>Oa^PUgzaM0~2ph zt>Z%Okl>(sz=~F9vl~D?S7`@08mw!Pqh?BtZ+bo)gPlVrE;0!wzDi+eX4L!TV`tY) z>74zl$OLQF0l@=MFod9@+rC*KVf+y6TDZlcRA>F3_q)VNm zN_}3R;GWX#fR#{#4EOu8O+e!wQa8t+I#(n`GgPgAiDw!Q%37R>^_P~g{z-;K78-EL`eipFd+X?uN5 zibJD-3??b=JzAKPk%dlud^o=YQzTSYbU4oxsee!k;E4irj&|7hdBrv>C1;hFk$`o; zaTfboUsFQBY=utr=^+C&zV)le0^t*ePFcYg0PkQH?2?HJ!uuIn~372Oa zq>d27{_Qfb0tme^s&klZ6Y$ag#~n~dFQaAATH$B%mCd<3p~`~fH%3x8jo&$A`EyTa zZpN!n!{@F$o|!ee`CiZ%h^f%8!j9dIz=LU!Ulc%NYycamMtumOFUyAp;YJLui=4N3 zsr)>0X+6b@5f;+WM{t=ERyU6OSN~Q|%uRB3WoleK-D5sPLd%oxS960A#nk2pntFw8 z;5{7?d#@DP2_6_2Pd@nnGQtmE2(x$esT(3Z#74QvGn8;4-)i@Sy6M9xZdz;*{}d?G zN^AGyh>zHJ?ntiR?H{+ErQq$3DrA0LSuPP!wS%XM)21Sj6He_}v<*A(a14@aWYo66 zV3d3?(-Y$Y3?XG8gjm>y2CHgxlFo$pT6_!&LXK1IZh{JO*c5eLTnw?%+Kb`trNhAa zwswdZKqDzhnY6yv(;RJt>edpQ@I3bU)$DBm%e5Uw&*0zZZU?dIulj3|CfmnnY!bvd zW`P-e)92So6-aQzDZxW7DZzSV5mz^WS;i9PW+jko zn-7XCVKTe8;@^XW5`pyUk>^){&GJC29c%c+%^Vd+uCxH!S%A?`6vq#PTEg71n;rHn z;iNE0*?J>$TO}N}p3B=TAzW|%-+B>H?T$(Po^-|KEpOi;ud0NIYr*o$TL@G4XLJ=! z(S^u=V>F9!Dz{#MprY60glOTqb4^uxF!)PGJ(c5WDAe8)Y8f&B3Sw0!*&dxVu>BO* zxb0)x=Zk5yjzs~t^Sy#~j`~8eG8gMI^Fw9sIe|_DY8L;D@)7{u=}AMlH~_5GRmnCL z1Og106wd%G08^os7jfYtG9w75wsy=;nJlSwP}-O)VACND!lf-@NaHe>142Xuthn_Y z$t_S-N?FaxfIHwOQq>1t0m^rHX8(}VdW&U=s0 z^rq>5g$xYs4V5aL^1vdq48PLn;Mu|pabl>1U&TG|JO>q9bP;9Ww6BS&51>eLhdNMl z`I=ubb6umzEq)P+{7G=e`}NN4)8GI9Qmg=e&2FxwLQOEqH)*bo(oKDC6vBf55C5Dv z=~Qrp4eXY0Q%Rgzd(E-#CACd^+zSi)+3T0L7dCfNaK)2cO84o0QtI~AO^rm|u*#xpm7qCrT5=RxhV%r4Zxpy4#r%59!IpeGyE>PS}m_?r5#JcqFt2Y2P%*}-F34GuZFB)t?& z%H=l+WcbhTuXB937^0v-G3Pr%f+THiVY!ja4LN!9nf6@2J*1Lvus_`rls1}D}O zyN9R40zY%HBmTeHjgaxjSE)$)P6PHoO{`)a-+?_AjM<)EM`C%DFW2gSS=xQ4j)B)!LsV2aqVyLZVb0_(#Wx)&&U*#c9YP05B?A^3GXM zXbMup1jor}b~C0Xsp>&HHRWxY;|@k=2fG4}5} zOi>mpO8px<83XPXC&Ey=bABQNECF}wCE6?!(1W)Gcf5ReEp?7I#l&e3_YL{{4re7f zjEu*DY+dD2E78%(p5TopX}mm?-7Sl}szrJ_IWz*$^|NzO$l#TG+DT?U`ssCE&KTvK z6-Mg4KddxzJ~cYjQf1}!?0o|&X%uC@lS)*X=VKJD^L_j|y(szo`rbS&IuZ2(EE#B2 z3y1i)c1?KNGqG|c*O9}j0Xbait0$JCXZ5{9a29LF&jGTU3j5p9+hY zhnbxPoWEAdcsJa-j89f!C*D@5MC$YEIeM53of2?WZy$X&rxdqF;BRBtGA zmc@QzVHh=zFM9rBuHnb!pfi>N^D48M@6$k7o3et4Pul^23<+FU(@Iws%T^{l2W|Us z9hAs}l}}9eHKR=fi?BQ zADC~^TL1jCWtJJVen7c<=edMOPT=gRw+s&8 zCfO~H(Lb)W6Eg4a_cXKGQw+*S(IovxIs0RUMknZ zW+~wc+B$p*2AMy`U{GK%TKL2%1!X_g>Z}cU|5~QiRAIhb3yip%vwLi~QLVAc7Zri0 zeLaH5&_d%a0WLsGKy@vcU%BFFriuIGxY+Ab?PYKJUCGRJi*6Heo<2eO20g@L6^~K4 z3BG?>;d+EPP5Z`v2UI_|$~^DebnTA*!=L~bcp3o~mII055t5I~_ZdvGPdPiUls^s> z0C*XzbN!E5Y zVp9Z$9u8-T$m&#HVl0)| zBM!$Mq`ctQZQ#-V`U2WAQ_iQ)fV1d}*puITn{h1uU(o|mOWa&}*Tj2|2RqIxsbLBp zH;CS@I!3Td1XmJR8A4neR8*5nJ?zDj$hROlf^B9SGr~! z0MRN}=|l=T+<~%{xC2uxTa@VN@tG+VF-mPD8?OGZB(yRnLr70U|I+azh^Tm(lgMdG z%!i_pl^65AQd?bSH3xzY0$*^JhcTOpf~EX?yy!)bTw|xOm?j^E1-?}4$2W_Z6GQu9 z{t7PG8+}}PwSKq5k!G8S&|ho4p}|;(U5@ulg%m=!j(~u2!^HFUGgGFAGZ-olvgjn% z1h%7R1qcCm^-^!3V$$YN)PYY5F9B_fWi&w=ilgIZo@+9chF9){bmZ`hI%sp?{kgRbJomfS(}}!|UCK|P`)8WJ zXX{ZOxHxko1QZSL0o|(;&MW{-Gri?**U>lBldw!4$oO{h{`DBV&C2dM3D~r%>STi^ zN%CkZguPehOj#`}RD%OJx!(Elw*A6$S7wAPD@BkXl{J@mTSKr*Co3yQGkzndmyK>I z&9*9OG0Hd2Qins6qqX3XlFN|Pdo`Zx*>)-{E0^by_S(HOC!QW><>_4=u=pKm&f)md zcv3Tg-}@g9*#WtR`l58k(V)&QT~_J@KatC!dROp#SNYTMm|ZebcO9Yqwv#Jt%PT4HM^~HgMW0F7ax10 z@%M*QHZ%US1BI9S9H0Z+f_jjFm-K$1Tqts7&x`OTxcocHS?SbYvf1sr`ZZAhwG@Z8hewB$*oAm}E!Fa{{8 zTB@%z)nKjp{E(y2^T!iFOo;n{c!RYuFKl1V{8PRJ^j$xgr_L*>BEr};LlPcb`k&g)y3=+pAuKfC;Y%)J9S&wH_WfGya z^{f6054SW<#|i0?3$Dz4Edg_H7gT=<@(a!&KGFm|!VfiLVv#HKMt7bD`l$3Jtii+4 zAFLa-Oe+tllqJOz;N4MW-8tJupptcQ<2$$}H^=0_I70sbV8QjpuBoD3;Ul?sn7ONs zckj}DG+G2Yo1tFaXFGa68=wOqL|43qN92H#NUC%nZLjB5`C*Iv5Wcooa_ep(4`!Ol z0bDrUKGSS(Mu8|v0}gdCxbaq-2}dL4)0$p{+jAg9b8|#I;W?n}(l~U&;AI3vkTi6F zl%vb}2V$xylEFTEW2(n2nC9}3HiQHgs6 z4P+zf^v0#P1VHK-bv6Y+p~gFraSs8am0+rHX9F;4gLv+$^k=AWZH+%EDG14PlJH_G z-%(B1A{~!xYuq1Azw3E{EJ@O@YW{&E8No%zaQ(Je844;49k2oTQK8U#EXlszJ^{P1 zb1C%h&>e@298&5;-11{%{U$P=%e%c47TL6o%bgh$V}!G^`ACk2ZRN^tQP5E>J1TmR z^gQW4cl)R7>~LcGzw^L_@H4I6`&uAXlEW_-wDcJh_OL@?Hq zqiIcMaTd-c*H{tQERE)1{w>CbpbAeRDlMgTbc6LIAa+>OihnPOVW zsSt# zFl4%@&Iwl=RDYLP+SOY(@((35BLEmkKRn{Pl#2lsfYc-rx=Z&byi<2xjhoPMe;ZzG2@BMmwb~o#y_%eZ23w1G z35|}&Qh>#V0*SdDdrxmQJv)}b&gBBo>z9pNfBXS6C)CyEKVF!2)wEcHY)gWfuf%3- z8Fz`lsy2sA**2deJU}L8%Qh3leB04=ukg0CWw6`M1zBb%98e-gBm`-RBY48E z5?vlldHJ1uE-njlAz<9%wfvCg?`e8aYVP4G#aw7!l;p-dwbG@vE|%Mee9Jj%h)9pp z(sfISXcvW!NSU+sF>j7cMl7GcI<=lARu7%B_#KKFsrnuDv|l-wnGNGNuvd0q%89FP zTu}Cb|HDc5v*`C?gsT!IFC;+C~4p| zY%~mt6w~S4mm-xe*~|Wo2_=RURj$sc34&$r6J&d4*OE8#NaJ*!MBcR#o6$1=1T*kL z2_;CDk`rYwrkdHre0{@qEQ5&!TvD9zZg*_z@RdfWkjc82phzGDI{*q3iP^B97(7ie91UuXq8?KTpnaj9jRxF#pQipCIVPls65`#tT{M#hL^) z{+S>QuKfrWR^EHZ(x?BdsaUDMFiHYF!d@JDwt^knfWq>cePN=-Y!>SnFd+x!M=7v; z5rbi8FL^|I0XC92&q-x2t>VCA4FDZWl!SoE(?teMZY-Pa4bnZ_j5W@?`e(UxVyJpI zBx<9)Jl*{XI9cy|{}kgZyWBw^oviRm9vIwga8HX534Kx$Ex6UQ=CmabI0ZBCo+XR{ zy})ZUNo{pbhQItL|9G?Fnz7T3muG%p zjqDeMbC!33HpYW#qfXwa$P(L^Lp@EGBd9T>xg#4csdba6^g#rjScm0WSoy;c&p*IH zCoEEh$P<=`qV=D~B<%GXL2k#??lYV+9*_{uMx`uNyQ3XWFmEhks@bQSxqJ7Fd(ob;1hV5W!^GpnJjeDzN4Fti zmb(~obzhbusVZB!WaYAoMVmV|GslAP{Vd>5Eqb5N{~#E)R)`fA&Pn(E&SF*n zv(PuIHuab^!kog9m6oONa+?*S8`0l}@3(KXOXz-9FDVKS1^u*9cZnE`2U#dbXt1_D z1k~6;h^icEoUpp&ehUV78e1nbK{+YPq^IH#`blw8GlQ z#TPhgCU7ieAjcW}$U$nkx-&OC3S6|p+Q-EgIBF(uF=)c0M0YJEElf9gkBa%xu^m=| zy}h}=2mmb!18{{EsHNZzoDeCuE=Q-kQABS#g&A4=A6okm;4@zj?S0&im+7KchY4}M z$3htm|4IaQq^+4{{CxH~3Ec1b{fH43Y!!1fjQ)PS`yfiD9o^RyIm^qF|3aAD<*un6 zaRV><-!ody+biL(3!vcCnGDeIMF1HWq&B1=;d^I)`7}e1zN}sl2RibH#we%_S$)Z5 zMqR2CUo@Qi;OXR5NqOUl=j!_k7qcv^6U z?~Yy7MO(4Wz;9%IfK<6+sDq&dEvT;S@|5&xqB|L1Q-G?u4?XrGr|3QT(qKU*?96(R zUF(8KX+VhEYLLp0(A7RLxY#QufW{IhC<#suug1~o-_JkDIKv-2*vhR^W4@cIWTGwB zXz}d-&{LX%GU2CRSv!^vvO;?iaoU`e8J8z#WRG_`K*+fmiu_+D&}Wt5%dvNetDcSK z^WWI$G-IAhdTsJ(vteiuArp*F2Jx)OtL= zmamj46G+CJkQ3CR+vE;OLX!yoW5)VLyHq8oH)jIbnp;tnRVh} zQN*Q)uKx~9yJ~c3`6ZVAf%&RZL?cL{*ER(ZZq-OGbq4p8sFB&;X_X)uY^-YIi`+!)nW8$?aZkF-Ug zXshthXDqk_D>q3)jw>MmD125;3t!A#8PtFfA^uNd7yLv2hfuLCD3k0F?VU%{^8$b| zUuIDAhs-55@v^HbA)wC^l*PPM{0<7hAz*PJtBO`}`u}j%zj=3#=k8hkZl<6xQy~nK z#S-_G-!zg@M-P8hB$tcTTjO@abxLJ5=e%nw>wsH@0{XJ(?Q3ytgtehlU^?Pu6lAH0dB(GhjUj0E60J>`2VG za@sE6>!oHph?e(R2>XCD;fk!)jKD*k{apQA`ZS7_N4opt%=Yr2R6B4#%6Xs;3yuTd z1Yg;s8R2c_O!{Zy3U~)#6i!ZZVuJfhOEcjZUaNVIfUyq($Gz(+Jz2uy?5PG+J&PY< z{P9<-F-2u@j_ZS~+^RnK_)2VxEMMf;p(_$E#At~)2-DBjzeK=- zedPjaA7QjgcKAF6?NuXv_PrIhc!L93PUB5WGJO5m7P!{@~mBRWn>vFG~?Y*6t?3U={!zirzG&2i@u!BKnu-h za?)bn!VU-4*?{@OjWs>g^QJsyIv6|YMXtUN{Y82H-*rNF6VUq9-U?Y(w^`-x^d{1+ zju-)G+P9%&*740Zc1@Zh)_E$^EVUSLr^$z|QdFr7$aig3U0T6U?=32DTEqlS^=}Zx zn&Z1>xY2j11RUvELm?I>QVL2aAG(hPg!hU6LluPhsB|$RRPV{1v7G;uU$8^6!T{>n z1}#_?3@IYoice!B%awH#I9+E9An^G_|A>NWkOt6VS)JhiJMdVpK2f;@4D2CURj_$A z_&vuGja@c0*y9N7@ABe#qeRCi&1kT_KS(a=DG zf5z2j@9}c(ZHDg1UZ>5i(%V)Go^;UmJ5zyozoJZsiMMWF&ab&LY~vM^lZ?6=ct!%&>Z2~U z*=Yp#FTOH^1m5G8TkI<^2Spz=eKxBVRUQf2_JUFJwgj{(S{V8%}c#x;~i%S>CF2)fQyfC zd}+zlCV4^=24zbU_aCAtb``VuYs>HP;(v%s-f%aR2dvlG^d1u{|Y zT&=T&C$CxZBGKjbA6RWQ6vh{y6>2H*bJ)%xwBDRloGbmBwa zx$8@2OmOf%Vag$PBU|Le&NXcIpt__>|G$KU_E{Qz5d}B%U};?5*t0m~=1hyuR@N2@ z?E;*ZsdC?4?%G$Kz{uOVCz9Y=yqTDslYG|b)1}TPHH-OV{^{2jtO z5tE(k)uUe*@DFOCti-HS_E|^ut_$xP5cb_6-0m8r&RkGEOy`wc_c8S)Q5H^;hsW@? zC`8(S#&e}VT+lG0!`72yc;*jD#GeSrO$v4g8I*qgIx->L=Ojc&r!K5|r?|3T|b zy~U7F7D6PzbEufEo1uPVDhE~eNjl!y(o`OBSNi71=V3`xO)|wrzKYF4m#DsMB~p1==H>PB^m zHbAyxROOzA7~eLs&6&~RFU~IZo#69WlJP3bA)-mv3L0GdT4U$#j!^oI`SIJMAa>fM5cFyMPIX# zm^O1xK*htD1^ghvxN%uk#SEq3zl$LO4P#>$b)Xz>~!6{b>%B zXyL`~%MLl^9#<3Lx@_TMNX>}9M~J>He}zUyOgqn}Z`b%%Se%u{t%(?VR2WG0b)g;3 zfrl(FD;n|nEj<9M!s87D9AmcE+yGONBe$4fd0*hQgI_$N?bU0Kn=cKjc|iSQz#(}z z&?hY=dpUT!oTMR2Blj|1r;_98ScJI5e^|$9QKkRR_u1RZKDwHHI{=VM1KQ0#*bTq& zb8S0CvW>4ENZ-z?k8`!-2~@oZ4H=M^B4rK z5*6UOREDu9&!P=GqqP;8tRI|4Mk_p$wfEl4qRLY79+t%xn^E6!AiL7yKvcfxziDYx zYswW1McQwmn8>BaU=M`?AHZ~iZ1}~)DzOTjO6JG^XiF12=p52NS3W*8J;E5{v@oOD z?g}v4v|UNz)WAvq<$3MnGh64bQQ@lQB$=4j`>k8s=|4XhcGc(*O=TO z(pW^07#GJ^lOJ?!xa;)MgzbHB6Y!DfVteqF!vQ!0F6>NReHwhzJ^^THQ0uYUq1n=J zRC;0sZ#7AA98BEml8fvoRTh&00niEVO%s($aBe%7g|9UNGGMxR4)saZ zp}fbjUVG3^D&mYX!#s*%F|U6y$0^VGMyv-_6SYT`VA%CGKl{oy-Hdo7XXx{;8IYbuj<-kAGgOtcs7P!li zj?hLLl3dQJC$yA5f)%sjXL2|N@MUc8_(!5d=@C$C^`=H(`c53lHjX;Ckxc*9+?oGC z7JY)3h8uH3OfHFeWZPVRD&{MkjcRR@wvQu&NYLxB+FCMJfLcYrBA{@aM(+O#u?H2r@2Vae3qjmn@a=S>#f=F0+UxK|JX%n?x4*d2)2)mr|qE= zKEKK=@r0UEY6fp6x&ev9tst5UDdb_jwV3f2CHq~Sw6B@u9&GYZK9eBct8d)Ca)MX2 z`cLt2EkmBIQLG{bS18k94?W&zQ+Q9T7+lhd`_%}@Q)+xVR1+T4 zX1|Pwa$_)9MWBhyPhj||%p$;B+h5HrGrjEP_I#@9R^o7~Vf&O?oM^!@>v3 zAEB5As?e{HpSQClxs|_3kmN7E+5wrH!rmfcFBm?D=_q+-)0*~xe`fWWRbxxauDnq%j#-LzL0!PSt z&d;nEMF9;ro6k!VSIk~Dq&@5F%mRmjIl3x-Pc2;9f+>D^mr`VaD9-YlNhV>P&xQb} z<4J$^a%u~%lCw1rYbPb(GY6a;r7U8PBzXdFUj0V-V$A%*e6QGDUSlgY(3e5?HMWEG zSh3Ctg{&0P`n#YR2C+Aqm<%Cs4f-v3Dr0e(_&D9R=;P{F?jket?E5!j_pbrYRl2uC zAAL(h0K3Tsh7klLr+!AEItxF(&iPt@t4=wi1-?^(FU*_AZtmTCfO{k`5*+OvU>a5` zv>b_fj~D0CsLbS<8_p|R{t~Bf2?8(4aXxFf8gV9;@-pwES$uLhrKtxEu3v2zv(L@p zX#Ab~f)b=IrQrz<=n&v|y_9U8u!>w=So=|OiVJBGyAiPhOjBY?zO}zEU7-lukj9Gc zBt3Y)rg~s5n=BBMs835?S7_mT3%KYZ;V#R<^i=Z;8E8i2Zi(DBKHoyTEl0FpG&*mK zyQ&d|G>NbO_~?6dLE=@`pkeV2sJ0h`d~|9!&M@^_QXYeTC#U>_Wyk& z?3+_}C{bl9lKA*yTOJhwmzKy@GHqXRnLOM+_ zo1HC>d&qV9&UwJT{2qFC#o6XeRAu`$L|@JxI%H>8&qN#wuu35|lotNZq@yAU-Y)|V zM{U0+n+V&y{Wc3Ssl_a-czVvi*c zDT02nbrXXiv73f3&jN|!3mzl0E~$ihPjz$aF_xHEW3p7HvqDVl?e9oyH=@w*yT#t; zByL@(;3m+t^sk?~xq7E=IgB>Auw5$I`L?o?J+;6=zelyui)=pKTY}O{gwwUnVSQPG z+T@MJjXQiq;1@8urEvTr%a+bHug%)uT7tpY6v@R7hMO*qVuz!?XwR5GM=;^9`Pqg> z=6(Y4)8nmc)Llm?e<>h%)T_i{!-ufC*A@y(Cf6E&?-|j#^Q9mEaGKp&#$x-9_%6&H zKiJrm{+BNE(b>+#`>4}kQ=59X7%Z>Wwf`d!boCoBPd~T9jruOzl2pyor+H5YGkNwS zVL?s68S#-|g_ugCy3T-Tvu@^*nTq2Y1L`k6z!-twHuUA%Yqa5(^1^VfzJ`2UWQXfdVP}4`QCIWZvXG1nT ztoJe9+Nv6ICN)p8(6ru_U;dBe%>WbYmg1LnNc1CY(eyh|T``+I=KwRG zqY-rt<(l$4rL6|w*~BP^cSC;9EH(8t5q{I?<-dF8WR&Knt0X}D%LK@)aqnBsBC1*b z(k-z7AVl3!Di7)Qt5HIkOEv*0vR1Z)Hgzt<;>W;r%61l3Q+Dtax& zCAQ?h-J_UChjs;(qsE;*YYX>4uv@@~iXu+-nB-FFG4>=Kj{;e=M4rcBjNbhzGAZr1;hmCTprTuNoUqCG*_@-a;+<@9c#Is%8wyD%8ouda#+_%3==03bsuT!yu_=q4 z-ISo&!%6tUF-M+VPfV(4BruXMv_}5gxHpd?!No<-7A5joL^-4#^CQrCK_n*d?U#cj zKB*SUi&L+=4OxD!+4ezTpTykjVeWhI2x!h^=x@PlrO!CFzEm^>d-8EtjO6$vE?^Sh zbo*xxL~<}((y#`DgRz`M6qqpnPRW%mC@%E$AD7nlh0rNy3Q9&_G#AbpFECe}z9`1&DPnt=FhxCv zF^c{ye@v*M*{8jhkpcuUg;GDYN&f#0@|P{-^qVD+s`DAEx5KNceGmVm@B(vD z|A^DsT8qZyuO>XaT-6p9$RB$WpLR6Ib_7i2rAd?jjO-6=Js|nrkx~N>PzpCxZOWcd z^4%g0Gj$KbC8X+^-#vgW!MukIDL_%X$UP3lg4zR@XYu83#^>*#{S&qsl`_^pQt;8r z7o3vgRdPsD#7fk3KDiP~^k41y+T|1i2Ch#>o4|>97}q%E5)|N>#v8ZdwU2+C&TmJG^YI)x#j-VYdjs97JJi&gulyMZr!Y7aaLfSK7HJIg4!%*FV)$3*Zqd}qxRATme} zS($R|Fs~mT*`X~)rz`CC`~*v1x`$c#QbyzM4Fo8yvu+6jU%)Q(e?Zj`JsIjz52EQY z*VWxp2zopbVHae&3R-NInhaBJ{`i{~-A%Kf^(U1d7ffw-D5iP`jh}KVeq4m6oN?;W z1d583wIJ#%&-$|?)0_Os^>;9BqkJ4e$<0YxTNcfcYD(|%*=9m=_Vn_i|60{)Yag#5 zlgXUCsfIyk5?yFRw?Kg6_P{U#USl+<(OBk0o{t)ETmm2n!V}w0FhCvq?CT=VW3*H; zQa_9S@H?v2woNBAP=r%G%tH*y&paMc!3li_`d>uug`<)gHnMEEV-Rz5rUJT{HqI;5 z{zrtnSRgGL+Wg0i@<4VCl65w%MC8D77_H}L^T39xyF+@GWwC!W95ZQNOe5pxc?bs? z4H^Spn5!YPO5u1|%lSsC;PuRZziQ;qd%Hw^$_6J9Q-KF5y?~AxvXKwaY}@sjLO{r> znOCeRj!1X2n}>aLS4keLb2|xJJtBaQ_9^ly=}PzjUe(Aci~+63gCx)700|A^utXBb zYwu3fRrE%G1vrqAZNwupY>Cfa8^Km~jj|8_mlMsP?q8r#F^hSG91CJ=tZ||fmZo(p zi;f40#%(E$#)6t4Dwcvih@p-zB91=h^Rl$1#{l+mIt2j{tycT%&HHg8B)kiRQf++r zzhOfgvyo<&wPV?Mq zyeQ=P$|I#KWEjAbj(TL83_s%egKAN$FD3-fxGL%70?+ksd4B4c5T-S|GS$-odCP7~ z*E176#oBT#a$gpJEB{p8QC_reO2XkiPc0UN{bE&ON^prFjkt@Sk-P^ZIa9oR07c8=_FCa!BwY1VE9fY z^;zoiiEvt##9=)DLDow+);-C_0fsrHxR0Z(^D7>+gjD$(%Q6imo!15EnOqOHm!qPn z*AC^f9U^B_r%C~}S&rAnh`rM%HL3r!geoOds*!sEb-0Wg#W|O{tT%#&+;EvRsmQ-T z0s)6sa0T%JgxEULl$TZt89jNEBIyMO#W2gi^fR~vN#5UJ14}MeRGNKhmaPT4;xse3 zBEkH5CiLZUr$Ob)w)D$-x7Gg@fslp5D+KQ=!W|Rx70mu$y!j9~zqUJXoRAO$UF^a; zne>Y$A)*QglnW_cS_*9k;c6#B0gGiHyF!75OapaNN>0)AU-k#=9Yq@ax?p)#PuM`n$cKpaoLKg6%c{$SOH zp4hhO_bZ8NSzJuEomu(I@{Vf~{P&KXfD2VY_FTB6J+E6uQiia8C#~vGFJ5Qv;?&!2 zq4w-!q^}am0Y7H` zHj9yZuop+mGC-KG?i{an3Jl6Z^1Jf>rWqRHcGfZzhu{ANfMroi49A_bszi z3G0f~;*QfUvIMRuTW4abw4hzPc3#q|uttUKzdg3-!!Y@$aU=?$?A5(2`xK461tVO> z56#F#zyN(xILz)}%{D26>8R{qu=)}~&56s~ss6`~eRP2eLjINX6+4`xgc;?|Ba z83UM_RwatZ;r3@}b-{}mpHG+V-WnBv{zh?{*$nvAuG4g%QQ5j*_A`ZI*Tf&Xz_+6c zG?`c*>&}8vL?Hq|`UnAK+3=vb`RS>d-yvxR_$Rzz;UP4=N_~Fk595kl!2^r_7pqrU zM!tVXQ#(#IBV1-2Es8<(sm~VM7~jTX_SsUFyGK+y|0O|Hcm4VxOr2zicKv%t4Y)*m zYYpigX2+tEFoPd*Zse1fY&Y_yFVr;lub`siqp(uqoq&f-j_0&WP#Q03>Lk0M}beNJhA5iwhTj{WA)SW*z9hpEv=y3ix(dQNg3oDxuh@5TE#ruZyKt zyZRJ-IP}?9Iv1GRDyBLu=tc>{kg}gIGxk!%7a1eOHiWkHb5Q3hv_T5!7g5hqt1Ij) z2=Vin4nhnZ_dg52C_t$ChGGhF>s<0Wj|vm+is5A3eAHk_i=nr2t1*7F>dtW;#kh7% zW|uwO_b{zBg^f{VL0@fll!-NvoWPi-6uY&K+h+Sy-Pma#4hZCveq&e+{Ph8VC7ue= zfcbDyt`73&&(VrJ1yA%;hgWtIOjP#s3@@Nl*?Y1*T^<6m)Ia-iBx?1A<@NQmZD-P$>&YX4=TlalCfyq}9qa%O$Zy_BU zrbc1l4!r5hIQaT|Cwub$@)~nIUuegpABd-cA3bEwx3yi~HYdjL?LG+FgD|3eA-UlB zxHcmvOq{0A1E+DNA0u7>=B@5G^|euwEYdfJ8La(el`)`nv0Yr|#blSZm;&KHqfJvp z^Sc{G=hxK4&k8k6nZbpieTiPB%mSf7q9heXRXyJ=z84Nr#HoUI$e_U?kgG8vKT?GL_dbUbig~mjOhAx z(@#HZdXEukU+-kUBw~T# z)zgSb)s6B%NB#D%jfrJ1IA5rvO(Q>HSUwr1XqrTX4Km@XR5(2hW@I|zPQ+(49UqDx z|BFmjjAgjq>g+z^x>4z|8lD7qNrZ@)iv&8Me)I@Whc;tPxvr?&>V7)EfAE`k>hXI@ zRtnfznQa0*k;8&u*XN&)mghD`gxy~2gWgTHV{v#HNh~ih>0eBB`f`_qhu9yw?ogI6 z-coYl1^$#$M>Xm-Hnt5m7v*C(_=C+dF1}CPer24BB5y; zVwLC5*ixi}*@5NpepGv^E2H@&Qc=^k4Uq;9a>n2qL8uj9i60@{Y44*WWn=7ZV)d;J zc8ErgKQ#y6j;b)HV7=67el-{*nInpv1aKqYbk|6H;Rqr#*i>Yr4>!atH$GGuC^p?c z2wH=l{RFK5me{j$nY81-#~{Ob6{?Y-VT}c931hrn7hV*2U_xNG`-+vcF*0X94sI=k zcr=tS?+=$&*yvK{F4OqRWxkG}ZLM>=CrH zdX(&Mu(~(0Jju9E6F^@cZsXgzJgiD4dh_U32yT6A3uomU0yynig9dOTH_=klHfg~* zpoj~Ra!IIXl%?DmaVC5dNYlmtpaepJ`I5Jyka9erYgldC27lFva&Jt^ijPJi3X9D) zRbq1Rl@^__wg_Otr6Pq^QZEcHG3Pcu%%Tbs)=jmN|4`V&=$8G;*8b|dd228=`1-I% zeS5n-zb)?+#EsWiM*{vmqml5zH~`b@rY2oCN=ID@IVww_bw7!$6E3x|KOJM{`sn_f z6r{=!YB$XyCyCBlMyMIQy%0?Cqs|H=iBgmM#=dlQf;18oBs_kb?v>)I2(f1EfSdax zeey%#{b`#_4=YLFH^IZzWIe)rU&A76(NJMY?)Q9MeTQ7BZ%r;eAIXmQ zPJzzd&VQY2mFyGmjESYFXL{hM`#;Loh|03j3Pr5=MYFyMtq?#Y9%vFOXApsAK`yj@gW6X7bx z1zw(HD~7$1U)E#HFkyq#Hu1?iV#0WN|M$K`hAg%i@S2rLVM60@9flyTsN2S$BZw~d| zXX@P&)i))EY*Pm}F`N#e9KDZK_(ghzJ%yObsKSn%%XCh26)8D2HekOj# z-qwm}n@|Jy?;P|BQgUSCkCR*+*?cMZIgm~ZufcDwA{>0sPC9aodko2;IxrRlMZJpR zJoC}_-P_qjdZET5`!uz7^1v$S^S;CbtXFB7UBr~K2q8jcOM+%sO+;+0wvpgJ?X3-f zmLaF2eH%vh5;Nw(k3Mq!pw#OwU-sfxFGi-eU2b22s1!u!yZ_+SCJL>!fCk_Adb<`e z(n*uuONK#zcExuOh1EiNo5efK_;;llOpzLYtatr_7q+|K0o4Q^rnnjkD_~VN3+OB9 zAEm^5aHpwMt{>33^nN-kR1vpUCwb+0yZ>k~a~SefX1V+j8uQ1diz4JO-Rs{l_i*`B z+axxIK~&4s?4KIk=8e=pEV2<@_Q~NadyRPt_=0BB0|0za{zcUTtnQ_|ckDH`u zXx6}4_^{pU^->=a`_q8sFgdP9lYyA=T<);XYniRI^Vxc5*fwrgQ<30kW^k=no?RgpMRLq z+Bhp8BWy0k_VQ!ykkgF=g!zhdwZQ)vmC6)*=D8`rS!Vy9Npbc0hnt31S>|IY-*cms zwC^hqB(**}Hs-<1MRC3_!)D;7A#hXwLR|aw_0&YOZ^lg8l8wvDr1ij>B3lnpqYM+; z&U(1Gk~6I{J}gVX#1Uh!-a<~&b0mXX59OoMRjzCk>z|(i5xPg(8>$Z5Dza1l%q0Ye z*P_EEb4mGkD28JoOfK?91PXmaxjh)E!xO8;z{nTbBs>_wyY_xY82hbK5)-4-V2$xP z^DV*X3V=1SNUOo2$ry`?6ZI&g=9^DIwAdGG2Et^m)_ljzhCM0MhNXlYM`Do5rB~0;LUy2uBH| z^RjC8J!Vy2U{~HA(vBN=t4ijt^{r|Pwh$AT2qs%EQ;YvpK7Xgw_a(T*V<*~n#AmR; zp3>)K)<}|tC>-(j&R!b+=dG9Y*pj_CY9Ypy%ac4u#qvsAQkS^ygL4f&PSr0U+lbfW zy!NjVx6~v$UsA)!s&|`#*W*!?WjU{li_sHt*bq1MQ$XkwubK()>2ju$^C8t41n%r= zmpM8YSam1O!I^i@;L%n}&P81AY_z(MCu4By7v$NR=@kFO&0$ctdYQ{^+dO`@G)GIN z7JV;3{%7md9IkQvT^i27kmn}vbIaCyv1cQh2;rW^O7dLv3qUpF0e&1Xs_)0(hi@CP z5=;-4Q+%hq;ba6{dufCH#fjS=r!|!$UC*_nvHB*XhJdfeEYRN5XO_8jRC@MZL3R_S z&gxN84mp{o1a>39*Mv4{o7aoyWB=l(wmVi~69G~vv{Bpho$uTO_`7I~Yi*{KM%95J z9}vy$j38}lL;}f3i8@CE=%FZxjV0q0?7_m&Xj^RT&ie~fb6n+p_5U@w4@=RyJ09OB zV62s34Z2K;yGm2+oq`PDs{G}<7?mTAYHHVo-vF!kfs(5=ePsB&UO`Hc|J^6L+ ze67>L^74nXG7I+LVsDtbrLv%;P|kn5XIwV+ESDN_$kg8fFk|m?YvaP@v~2F+OY)l< z8p5V4k7UCJsimsM#oOOV1~M!YK+Dvs?DQd`4Zfrx59#Re0Yxg=tu!rMcNhc<;OdfV z+lN&8y^_$XcK>(lgeNR0A;m^L&svW(>0ui|In$(981Q+){Gg5PgPR}jNE@n!AxVlB zBhL+t>hq)Cmb@=7AHj&_o^Q9%RRCPkt7TD-M zxZZt-e|%183MZyEfrSL7d|Eb17VQ<1hCM!uqFBKcP3z8m&wZ;``2U$i?fyUp;H9ng zkBI$hE%NH82i$@#)DxwV*67&I{uEKxB^-?S&)!epuoOEpIBbMv#Y^NO$Gk!^&M1>IYvIZ zbSc8Xpvd#nk7p7CAbu!ljdN~$6i*>o&}s+31E^W2d$&X}t~8hNZRI9UTUy^o#gn5b zn?L;2Jc90^q5j5??XzEG_RK7K-;Aq{ZSzD}M@pzL{us=Kd*84J;1{a6&LU(^pvwv1 zi9nV2)kRy~)P`cI3`ZfVuGe$-y5!lFfac$2MLW3q<4me3y3Z+ycrtNAB!d>IVE;cWA2CjW}NzWac`JGP_G z09~u&`-(eCx!4r8o= zgkq@%9aO3#mzbw1RSJY&K`vS95w0=Gp$Q){DR-K1uO! zfbjprH&0!M4yc`;Il+Afo=FZpOG-Btjr3l;|2{P2)MDqz*!%9!&To}>dztU#$)Qsx z>_tZeFLc^5fnw#43>wvKaTQjN;EVA*6v0E8SsH9P7UI2S z9BCg1a0N1?e)3_d)ns`PUNdkU zy~4_d8psSFuG}SFvn_7A5@@o#C{Fy)93$97mRaIhM=owq!uJJ@zjgDvAE~K0Cm)m) z;!izFReP6`XK~B-HBL@|(!MXJhc>a2{o_6tSq_I>KRh4XOZ4T{BsO+`7ltLA!I0kf zlI8K@e`s?`#t6)LPe`Tf!b0k5T=qQ4V=yypk3NEJ`wX>ombq^a-q^{Q(%2hO+@MUh z>q+jL!iew}Hi4dWhAnY=3@TaehlSF&vKBn8Fx$-axzH-oOUNL+UAj9RyfKHGHy1GbHVCAwMzTB_|b$K@Iw>`jI_ zbx7IK@0v&te0)FsZ5>-2PAjRpsfH&R8v$&Vh3>=UL~1OGUq(ksF#@Y$wqQ1Wq zI9(hAIuogWi=OH7iZGy)sU|zDkgPb~oWJqb9s@I#1I>}WIe+7vJSkMe0mMD%){#gm33HGMcQCMPN%lEKPmE3+%j#hdrJ#aEfR#YTMKHvi&H?sH3nS#95-0G+15ddjzJifcZCjx}^5B?jAp{e6 zQ~JLn+@Ft&{Y6}jxj7!sS(hdx7+0{3&o8zgE6#o-CpduYF@glUwMxqHjPHz-mOjeC8nb( z1lgr6=tk~J;X#|)^R30OlGgpfDgfAdz2&+F5FbsaE4{9R@(6Jvp4?S$GoW#*q|39u z3l!zZZqAI<}o&Z))oEeI%UZ)!%}h+$*X7h4M(A;mpK<$lEu&|t7Byy>LNV;YN6Oh^Se+&*uH`pKR zbZsMUh{(XKqd9k>voixFqiCADqI9Ne)V1ouX1Quk}uaP;flP1BB zMub22vA87gReyH-Fl!29$<#gJTS=s+n}U4ZcVKxqNf}cQXGZBi=0pDP=A)Hs+s>Wp z1{%yNMLziy^e(-Za8p%CQ%IhZ0FK8SdnK>q#7H1^OKn_xKr7CXT+O=IexM?KBg|Ro zKH0_52}2CA5r~9EOmo~L64mv(2E{soq9BsSbt~a~cT6X@EMF8Wuxf4J39X+k%65|; zHS{W)o8&L2k^0{WUP-91!mFjY;=f#9L8Y|euGXWq_jiMNLR$hUbsg6Lf-+y~D!7Mh zT0i5>f2E3glwyr@%!6no;{ChyXna?QPmFjx-E)bbj_r62;F$giBbO1D@EH*SV26aP z0G0F2@a$)(lP3tID$r?p=^6n;&>)BGR}z!g!s9GG^J(R)>{8Syyw<{3L)|Au_6(Rq zsea|&g)UN9=l*d-pB+TQTkS55i}Te|Ai+P|_|PMwr(gTq+XE3_ODHs_$71i~G;09i zT8QAA%!F!w;1dY~%IBu-%$UZSX0F!J|Ca7UBaRKI;dFIt?+hsw$^)%kMvE7i1F3*@ zI2a5Q6ssB<7yflbfDMGB*XLwAs+vNQ$)1Wmt{=0g&P5d{1W6M96VEJLNGPgiM6RG! zrN1EAczwN=#PP`E;xIA4#d434XhAJo6B_#7ne@Ps9j~hb{wk?)0f^th+kR74;ca8& z9T+us=?M_uU4Q_|2D4%Y&#a^Q96tx4T*N0;pu=T|X0mEM!B#t5aXw5y>H=^BuhJl) z0zn*boE>E6-(z67vIK@IG|Dm$_zQC2oWOy?{>C5j0H{_sJW~t7j1w`BC>>7_xa2?- oN>d!>Q&n{Q#B)Z<@*Un;SEar3!YY=SxYEy*a6;*Y#()3-09olm_W%F@ literal 0 HcmV?d00001 diff --git a/docs/index.md b/docs/index.md index 9bd2ccb82..b9d8917bc 100644 --- a/docs/index.md +++ b/docs/index.md @@ -63,14 +63,21 @@ GraphFrames supplied as a package. * [Quick Start](quick-start.html): a quick introduction to the GraphFrames API; start here! * [GraphFrames User Guide](user-guide.html): detailed overview of GraphFrames in all supported languages (Scala, Java, Python) +* [Motif Finding Tutorial](motif-tutorial.html): learn to perform pattern recognition with GraphFrames using a technique called network motif finding over the knowledge graph for the `stackexchange.com` subdomain [data dump](https://archive.org/details/stackexchange) **API Docs:** * [GraphFrames Scala API (Scaladoc)](api/scala/index.html#org.graphframes.package) * [GraphFrames Python API (Sphinx)](api/python/index.html) +**Community Forums:** + +* [GraphFrames Mailing List](https://groups.google.com/g/graphframes/): ask questions about GraphFrames here +* [#graphframes Discord Channel on GraphGeeks](https://discord.com/channels/1162999022819225631/1326257052368113674) + **External Resources:** * [Apache Spark Homepage](http://spark.apache.org) * [Apache Spark Wiki](https://cwiki.apache.org/confluence/display/SPARK) -* [Mailing Lists](http://spark.apache.org/mailing-lists.html): Ask questions about Spark here +* [Apache Spark Mailing Lists](http://spark.apache.org/mailing-lists.html) +* [GraphFrames on Stack Overflow](https://stackoverflow.com/questions/tagged/graphframes) diff --git a/docs/motif-tutorial.md b/docs/motif-tutorial.md new file mode 100644 index 000000000..2f95952ee --- /dev/null +++ b/docs/motif-tutorial.md @@ -0,0 +1,768 @@ +--- +layout: global +displayTitle: GraphFrames Network Motif Finding Tutorial +title: Network Motif Finding Tutorial +description: GraphFrames GRAPHFRAMES_VERSION motif finding tutorial - teaches you to find motifs using Stack Exchange data +--- + +This tutorial covers GraphFrames' motif finding feature. We perform pattern matching on a property graph representing a Stack Exchange site using Apache Spark and [GraphFrames' motif finding](user-guide.html#motif-finding) feature. We will download the `stats.meta` archive from the [Stack Exchange Data Dump at the Internet Archive](https://archive.org/details/stackexchange), use PySpark to build a property graph and then mine it for property graph network motifs by combining both graph and relational queries. + +* Table of contents (This text will be scraped.) + {:toc} + +# What are graphlets and network motifs? + +Graphlets are small, connected subgraphs of a larger graph. Network motifs are recurring patterns in complex networks that are significantly more frequent than in random networks. They are the building blocks of complex networks and can be used to understand the structure and function of networks. Network motifs can be used to identify functional modules in biological networks, detect anomalies in social networks, detect money laundering and terrorism financing in financial networks, and predict the behavior of complex systems. + +

+
+ Directed network motifs for up to Four nodes +
Extending the Applicability of +Graphlets to Directed Networks, Aparicio et al. 2017
+
+
+ +We are going to mine motifs using Stack Exchange data. The Stack Exchange network is a complex network of users, posts, votes, badges, and tags. We will use GraphFrames to build a property graph from the Stack Exchange data dump and then use GraphFrames' motif finding feature to find network motifs in the graph. You'll see how to combine graph and relational queries to find complex patterns in the graph. + +# Download the Stack Exchange Dump for [stats.meta](https://stats.meta.stackexchange.com) + +The Python tutorials include a CLI utility at [`python/graphframes/tutorials/download.py`](python/graphframes/tutorials/download.py) for downloading any site's [Stack Exchange Data Dump](https://archive.org/details/stackexchange) from the Internet Archive. The script takes the subdomain as an argument, downloads the corresponding 7zip archive and expands it into the `python/graphframes/tutorials/data` folder. + +
+{% highlight bash %} +Usage: download.py [OPTIONS] SUBDOMAIN + + Download Stack Exchange archive for a given SUBDOMAIN. + + Example: python/graphframes/tutorials/download.py stats.meta + + Note: This won't work for stackoverflow.com archives due to size. + +Options: + --data-dir TEXT Directory to store downloaded files + --extract / --no-extract Whether to extract the archive after download + --help Show this message and exit. +{% endhighlight %} +
+ +Use `download.py` to download the Stack Exchange Data Dump for `stats.meta.stackexchange.com`. + +
+{% highlight bash %} +$ python python/graphframes/tutorials/download.py stats.meta + +Downloading archive from +Downloading [####################################] 100% +Download complete: python/graphframes/tutorials/data/stats.meta.stackexchange.com.7z +Extracting archive... +Extraction complete: stats.meta.stackexchange.com +{% endhighlight %} +
+ +# Build the Graph + +We will build a property graph from the Stack Exchange data dump using PySpark in the [python/graphframes/tutorials/stackexchange.py](python/graphframes/tutorials/stackexchange.py) script. The data comes as a single XML file, so we use [spark-xml](https://github.com/databricks/spark-xml) (moving inside Spark as of 4.0) to load the data, extract the relevant fields and build the nodes and edges of the graph. For some reason Spark XML uses a lot of RAM, so we need to increase the driver and executor memory to at least 4GB. + +
+{% highlight bash %} +$ spark-submit --packages com.databricks:spark-xml_2.12:0.18.0 --driver-memory 4g --executor-memory 4g python/graphframes/tutorials/stackexchange.py +{% endhighlight %} +
+ +The script will output the nodes and edges of the graph in the `python/graphframes/tutorials/data` folder. We can now use GraphFrames to load the graph and perform motif finding. + +# Motif Finding + +We will use GraphFrames to find motifs in the Stack Exchange property graph. The script [python/graphframes/tutorials/motif.py](python/graphframes/tutorials/motif.py) demonstrates how to load the graph, define various motifs and find all instances of the motif in the graph. + +NOTE: I use the terms `node` as interchangaable with `vertex` and `edge` with `link` or `relationship`. The API is [GraphFrame.vertices](https://graphframes.github.io/graphframes/docs/_site/api/python/graphframes.html#graphframes.GraphFrame.vertices) and [GraphFrames.edges](https://graphframes.github.io/graphframes/docs/_site/api/python/graphframes.html#graphframes.GraphFrame.edges) but some documentation says `relationships`. We need to add an alias from `g.vertices` to `g.nodes` and `g.edges` to both `g.relationships` and `g.links`. + +For a quick run-through of the script, use the following command: + +
+{% highlight bash %} +spark-submit --packages com.databricks:spark-xml_2.12:0.18.0 python/graphframes/tutorials/stackexchange.py +{% endhighlight %} +
+ +Let's walk through what it does, line-by-line. The script starts by importing the necessary modules and defining some utility functions for visualizing paths returned by [g.find()](https://graphframes.github.io/graphframes/docs/_site/user-guide.html#motif-finding). Note that if you give `python/graphframes/tutorials/download.py` CLI a different subdomain, you will need to change the `STACKEXCHANGE_SITE` variable. + +
+{% highlight python %} +import pyspark.sql.functions as F +from graphframes import GraphFrame +from pyspark import SparkContext +from pyspark.sql import DataFrame, SparkSession + + +# Initialize a SparkSession +spark: SparkSession = ( + SparkSession.builder.appName("Stack Overflow Motif Analysis") + # Lets the Id:(Stack Overflow int) and id:(GraphFrames ULID) coexist + .config("spark.sql.caseSensitive", True) + .getOrCreate() +) +sc: SparkContext = spark.sparkContext +sc.setCheckpointDir("/tmp/graphframes-checkpoints") + +# Change me if you download a different stackexchange site +STACKEXCHANGE_SITE = "stats.meta.stackexchange.com" +BASE_PATH = f"python/graphframes/tutorials/data/{STACKEXCHANGE_SITE}" +{% endhighlight %} +
+ +Load the nodes and edges of the graph from the `data` folder and count the types of node and edge. We repartition the nodes and edges to give our motif searches parallelism. GraphFrames likes nodes/vertices and edges/relatonships to be cached. + +
+{% highlight python %} +# +# Load the nodes and edges from disk, repartition, checkpoint [plan got long for some reason] and cache. +# + +# We created these in stackexchange.py from Stack Exchange data dump XML files +NODES_PATH: str = f"{BASE_PATH}/Nodes.parquet" +nodes_df: DataFrame = spark.read.parquet(NODES_PATH) + +# Repartition the nodes to give our motif searches parallelism +nodes_df = nodes_df.repartition(50).checkpoint().cache() + +# We created these in stackexchange.py from Stack Exchange data dump XML files +EDGES_PATH: str = f"{BASE_PATH}/Edges.parquet" +edges_df: DataFrame = spark.read.parquet(EDGES_PATH) + +# Repartition the edges to give our motif searches parallelism +edges_df = edges_df.repartition(50).checkpoint().cache() +{% endhighlight %} +
+ +Check out the node types we have to work with: + +
+{% highlight python %} +# What kind of nodes we do we have to work with? +node_counts = ( + nodes_df + .select("id", F.col("Type").alias("Node Type")) + .groupBy("Node Type") + .count() + .orderBy(F.col("count").desc()) + # Add a comma formatted column for display + .withColumn("count", F.format_number(F.col("count"), 0)) +) +node_counts.show() +{% endhighlight %} +
+ +
+{% highlight python %} ++---------+------+ +|Node Type| count| ++---------+------+ +| Badge|43,029| +| Vote|42,593| +| User|37,709| +| Answer| 2,978| +| Question| 2,025| +|PostLinks| 1,274| +| Tag| 143| ++---------+------+ +{% endhighlight %} +
+ +Check out the edge types we have to work with: + +
+{% highlight python %} +# What kind of edges do we have to work with? +edge_counts = ( + edges_df + .select("src", "dst", F.col("relationship").alias("Edge Type")) + .groupBy("Edge Type") + .count() + .orderBy(F.col("count").desc()) + # Add a comma formatted column for display + .withColumn("count", F.format_number(F.col("count"), 0)) +) +edge_counts.show() +{% endhighlight %} +
+ +
+{% highlight python %} ++----------+------+ +| Edge Type| count| ++----------+------+ +| Earns|43,029| +| CastFor|40,701| +| Tags| 4,427| +| Answers| 2,978| +| Posts| 2,767| +| Asks| 1,934| +| Links| 1,180| +|Duplicates| 88| ++----------+------+ +{% endhighlight %} +
+ +

Combining Node Types

+ +Note: you don't need to run the code in this section, it is just for reference. The data we loaded above is already prepared for use. Jump ahead to Creating GraphFrames and run that next :) + +At the moment, GraphFrames has a limitation: there is only one node and edge type (for now). There are many fields in the nodes of our `GraphFrame` because there only one node type is available. I have combined different types of node into a single type by including all properties of all types in one class of node. I created a `Type` field for each type of node, then merged all fields into a single, global `nodes_df` `DataFrame`. This `Type` column can then be used in relational [DataFrame](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/dataframe.html) operations to distinguish between types of nodes. + +This limitation is an annoyance that should be fixed in the future, with the ability to have multiple node types in a `GraphFrame`. In practice it isn't a big hit in productivity, but it means you have to [DataFrame.select](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrame.select.html) certain columns for each node `Type` when you do a [DataFrame.show()](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrame.show.html) or the width of the DataFrame will be too wide to easily read. + +Here is how that was accomplished in python/graphframes/tutorials/stackexchange.py. + +
+{% highlight python %} +# +# Form the nodes from the UNION of posts, users, votes and their combined schemas +# + +all_cols: List[Tuple[str, T.StructField]] = list( + set( + list(zip(posts_df.columns, posts_df.schema)) + + list(zip(post_links_df.columns, post_links_df.schema)) + + list(zip(comments_df.columns, comments_df.schema)) + + list(zip(users_df.columns, users_df.schema)) + + list(zip(votes_df.columns, votes_df.schema)) + + list(zip(tags_df.columns, tags_df.schema)) + + list(zip(badges_df.columns, badges_df.schema)) + ) +) +all_column_names: List[str] = sorted([x[0] for x in all_cols]) + + +def add_missing_columns(df: DataFrame, all_cols: List[Tuple[str, T.StructField]]) -> DataFrame: + """Add any missing columns from any DataFrame among several we want to merge.""" + for col_name, schema_field in all_cols: + if col_name not in df.columns: + df = df.withColumn(col_name, F.lit(None).cast(schema_field.dataType)) + return df + + +# Now apply this function to each of your DataFrames to get a consistent schema +posts_df = add_missing_columns(posts_df, all_cols).select(all_column_names) +post_links_df = add_missing_columns(post_links_df, all_cols).select(all_column_names) +users_df = add_missing_columns(users_df, all_cols).select(all_column_names) +votes_df = add_missing_columns(votes_df, all_cols).select(all_column_names) +tags_df = add_missing_columns(tags_df, all_cols).select(all_column_names) +badges_df = add_missing_columns(badges_df, all_cols).select(all_column_names) +assert ( + set(posts_df.columns) + == set(post_links_df.columns) + == set(users_df.columns) + == set(votes_df.columns) + == set(all_column_names) + == set(tags_df.columns) + == set(badges_df.columns) +) +{% endhighlight %} +
+ +

Creating GraphFrames

+ +Now we create a [GraphFrame object](https://graphframes.github.io/graphframes/docs/_site/api/python/graphframes.html#graphframes.GraphFrame) from the `nodes_df` and `edges_df` `DataFrames`. We will use this object to find motifs in the graph. + +Back to our motifs :) It is time to create our GraphFrame object. It has a number of powerful APIs, including the [GraphFrame.find()](https://graphframes.github.io/graphframes/docs/_site/api/python/graphframes.html#graphframes.GraphFrame.find) method for finding motifs in the graph. + +
+{% highlight python %} +g = GraphFrame(nodes_df, edges_df) + +g.vertices.show(10) +print(f"Node columns: {g.vertices.columns}") + +g.edges.sample(0.0001).show(10) +{% endhighlight %} +
+ +The `GraphFrame` object is created and the node columns and edges are displayed. + +
+{% highlight python %} +# Node DataFrame is too wide to display here... because it has this many columns. +Node columns: ['id', 'AboutMe', 'AcceptedAnswerId', 'AccountId', 'AnswerCount', 'Body', 'Class', 'ClosedDate', 'CommentCount', 'CommunityOwnedDate', 'ContentLicense', 'Count', 'CreationDate', 'Date', 'DisplayName', 'DownVotes', 'ExcerptPostId', 'FavoriteCount', 'Id', 'IsModeratorOnly', 'IsRequired', 'LastAccessDate', 'LastActivityDate', 'LastEditDate', 'LastEditorDisplayName', 'LastEditorUserId', 'LinkTypeId', 'Location', 'Name', 'OwnerDisplayName', 'OwnerUserId', 'ParentId', 'PostId', 'PostTypeId', 'RelatedPostId', 'Reputation', 'Score', 'TagBased', 'TagName', 'Tags', 'Text', 'Title', 'Type', 'UpVotes', 'UserDisplayName', 'UserId', 'ViewCount', 'Views', 'VoteType', 'VoteTypeId', 'WebsiteUrl', 'WikiPostId', 'degree'] + +# Edge DataFrame is simpler ++--------------------+--------------------+------------+ +| src| dst|relationship| ++--------------------+--------------------+------------+ +|b0d39443-5b0b-42e...|3e84a1ed-1c20-413...| Answers| +|4c781826-3112-4b2...|07665936-d759-4f6...| Earns| +|a11d77a7-da09-4b0...|a9ea6e7d-7cc1-408...| CastFor| +|bd42f75a-b3ee-4d0...|fe216e41-1ae0-4c0...| Earns| +|4dd3c6be-b103-4ab...|2aa18136-59a7-498...| Earns| +|13540451-5823-417...|37966108-de38-4aa...| CastFor| +|f60ed1aa-5361-4ab...|1c5352c1-d084-47c...| Earns| +|9cb948f8-c7d5-40d...|71bc77c4-dfe7-47e...| Earns| +|03980309-e97e-402...|d0b4c366-c8d0-458...| Asks| +|b3736001-b654-419...|14920c81-232b-479...| Earns| ++--------------------+--------------------+------------+ +only showing top 10 rows +{% endhighlight %} +
+ +

Validating GraphFrames

+ +Let's validate that all edges in our `GraphFrame` object have valid IDs - it is common to make mistakes in ETL for knowledge graph construction and have edges that point nowhere. GraphFrames tries to validate itself but can sometimes accept bogus edges. + +
+{% highlight python %} +# Sanity test that all edges have valid ids +edge_count = g.edges.count() +valid_edge_count = ( + g.edges.join(g.vertices, on=g.edges.src == g.vertices.id) + .select("src", "dst", "relationship") + .join(g.vertices, on=g.edges.dst == g.vertices.id) + .count() +) + +# Just up and die if we have edges that point to non-existent nodes +assert ( + edge_count == valid_edge_count +), f"Edge count {edge_count} != valid edge count {valid_edge_count}" +print(f"Edge count: {edge_count:,} == Valid edge count: {valid_edge_count:,}") +{% endhighlight %} +
+ +
+{% highlight python %} +Edge count: 97,104 == Valid edge count: 97,104 +{% endhighlight %} +
+ +

Structural Motifs

+ +Let's look for a simple motif: a directed triangle. We will find all instances of a directed triangle in the graph. The [`GraphFrame.find()`](https://graphframes.github.io/graphframes/docs/_site/api/python/graphframes.html#graphframes.GraphFrame.find) method takes a string as an argument that specifies the structure of a motif one edge at a time, in the same syntax as Cypher, with a semi-colon between edges. For a triangle motif, that works out to: `(a)-[e]->(b); (b)-[e2]->(c); (c)-[e3]->(a)`. Edge labels are optional, this is valid graph query: `(a)-[]->(b)`. + +The `g.find()` method returns a `DataFrame` with fields fo each of the node and edge labels in the pattern. To further express the motif you're interested in, you can now use relational `DataFrame` operations to filter, group, and aggregate the results. This makes the network motif finding in GraphFrames very powerful, and this type of property graph motif was originally defined in the [graphframes paper](https://people.eecs.berkeley.edu/~matei/papers/2016/grades_graphframes.pdf). + +A complete description of the graph query language is in the [GraphFrames User Guide](https://graphframes.github.io/graphframes/docs/_site/user-guide.html#motif-finding). Let's look at an example: a directed triangle. We will find all instances of a directed triangle in the graph. + +
+
+ G4 and G5 Directed Network Motifs +
+ G4 is a continuous triangle. G5 is a divergent triangle. +
+
+
+ +
+{% highlight python %} +# G4: Continuous Triangles +paths = g.find("(a)-[e1]->(b); (b)-[e2]->(c); (c)-[e3]->(a)") + +# Show the first path +paths.show(3) +{% endhighlight %} +
+ +The resulting path has a field for each step in the `find()`; each field has all properties of our nodes or edges. + +
+{% highlight python %} ++------------+------------+------------+------------+------------+------------+ +| a| e1| b| e2| c| e3| ++------------+------------+------------+------------+------------+------------+ +|{57198c52...|{57198c52...|{7fd044f5...|{7fd044f5...|{695b549b...|{695b549b...| +|{8f534b7c...|{8f534b7c...|{e65038cf...|{e65038cf...|{d5ea2a3d...|{d5ea2a3d...| +|{695b549b...|{695b549b...|{57198c52...|{57198c52...|{7fd044f5...|{7fd044f5...| ++------------+------------+------------+------------+------------+------------+ +only showing top 3 rows +{% endhighlight %} +
+ +This can be overwhelming to look at, so in practice you will `DataFrame.select()` (a path is just a pyspark.sql.DataFrame) the properties of interest. + +Aggregating paths can express powerful semantics. Let's count the types of paths of this triangle motif in the graph of each node and edge type. + +
+{% highlight python %} +graphlet_type_df = paths.select( + F.col("a.Type").alias("A_Type"), + F.col("e1.relationship").alias("(a)-[e1]->(b)"), + F.col("b.Type").alias("B_Type"), + F.col("e2.relationship").alias("(b)-[e2]->(c)"), + F.col("c.Type").alias("C_Type"), + F.col("e3.relationship").alias("(c)-[e3]->(a)"), +) + +graphlet_count_df = ( + graphlet_type_df.groupby( + "A_Type", "(a)-[e1]->(b)", "B_Type", "(b)-[e2]->(c)", "C_Type", "(c)-[e3]->(a)" + ) + .count() + .orderBy(F.col("count").desc()) + # Add a comma formatted column for display + .withColumn("count", F.format_number(F.col("count"), 0)) +) +graphlet_count_df.show() +{% endhighlight %} +
+ +The result shows the only continuous triangles in the graph are 39 question-link loops. Motif matching for simple motifs based on topology alone can be used to for exploratory data analysis over a knowledge graph in the same way you might run GROUP BY / COUNT queries on a table in a relational database to start to understand its contents. + +
+{% highlight python %} ++--------+-------------+--------+-------------+--------+-------------+-----+ +| A_Type|(a)-[e1]->(b)| B_Type|(b)-[e2]->(c)| C_Type|(c)-[e3]->(a)|count| ++--------+-------------+--------+-------------+--------+-------------+-----+ +|Question| Links|Question| Links|Question| Links| 24| +|Question| Duplicates|Question| Links|Question| Links| 4| +|Question| Links|Question| Links|Question| Duplicates| 4| +|Question| Links|Question| Duplicates|Question| Links| 4| +|Question| Duplicates|Question| Links|Question| Duplicates| 1| +|Question| Duplicates|Question| Duplicates|Question| Links| 1| +|Question| Links|Question| Duplicates|Question| Duplicates| 1| ++--------+-------------+--------+-------------+--------+-------------+-----+ +{% endhighlight %} +
+ +Let's try a different triangle, a divergent triangle. The code to visualize a 3-edged motif is the same each time. + +
+{% highlight python %} +# G5: Divergent Triangles +paths = g.find("(a)-[e1]->(b); (a)-[e2]->(c); (c)-[e3]->(b)") + +graphlet_type_df = paths.select( + F.col("a.Type").alias("A_Type"), + F.col("e1.relationship").alias("(a)-[e1]->(b)"), + F.col("b.Type").alias("B_Type"), + F.col("e2.relationship").alias("(a)-[e2]->(c)"), + F.col("c.Type").alias("C_Type"), + F.col("e3.relationship").alias("(c)-[e3]->(b)"), +) + +graphlet_count_df = ( + graphlet_type_df.groupby( + "A_Type", "(a)-[e1]->(b)", "B_Type", "(a)-[e2]->(c)", "C_Type", "(c)-[e3]->(b)" + ) + .count() + .orderBy(F.col("count").desc()) + # Add a comma formatted column for display + .withColumn("count", F.format_number(F.col("count"), 0)) +) +graphlet_count_df.show() +{% endhighlight %} +
+ +The result is a count of the divergent triangles in the graph by type. + +
+{% highlight python %} ++--------+-------------+--------+-------------+--------+-------------+-----+ +| A_Type|(a)-[e1]->(b)| B_Type|(a)-[e2]->(c)| C_Type|(c)-[e3]->(b)|count| ++--------+-------------+--------+-------------+--------+-------------+-----+ +| Tag| Tags|Question| Tags|Question| Links|1,775| +| User| Asks|Question| Posts| Answer| Answers| 274| +|Question| Links|Question| Links|Question| Links| 236| +| Tag| Tags|Question| Tags|Question| Duplicates| 140| +| User| Asks|Question| Asks|Question| Links| 103| +|Question| Links|Question| Links|Question| Duplicates| 14| +|Question| Duplicates|Question| Links|Question| Links| 13| +|Question| Links|Question| Duplicates|Question| Links| 12| +| User| Asks|Question| Asks|Question| Duplicates| 8| +|Question| Duplicates|Question| Links|Question| Duplicates| 8| +|Question| Duplicates|Question| Duplicates|Question| Links| 7| +|Question| Duplicates|Question| Duplicates|Question| Duplicates| 2| +|Question| Links|Question| Duplicates|Question| Duplicates| 1| ++--------+-------------+--------+-------------+--------+-------------+-----+ +{% endhighlight %} +
+ +1. (Tag)-[Tags]->(Question B); (Tag)-[Tags]->(Question C); (Question C)-[Links]->(Question B), or "A tag is used on a question, that tag is used on another question, and the two questions are linked." It makes sense that questions sharing tags are often linked. +2. (User)-[Asks]->(Question B); (User)-[Posts]->(Answer C); (Answer C)-[Answers]->(Question B), or "A user answers their own question." +3. A triangle of linked questions. +4. (Tag)-[Tags]->(Question B); (Tag)-[Tags]->(Question C); (Question B)-[Duplicates]->(Question C), or "A tag appears for a pair of duplicate answers." +5. A user asks linked questions. + +

Property Graph Motifs

+ +Simple motif finding can be used to explore a knowledge graph. It is also possibel to use domain knowledge to define and match known patterns and then explore new variant motifs. This can be used to apply and then expand domain knowledge about a knowledge graph. It is powerful stuff! + +We can do more with the properties of paths than just count them by node and edge type. We can use the properties of the nodes and edges in the paths to filter, group, and aggregate the results to form property graph motifs. Such complex motifs were first defined (without being formally named) in the paper describing this prject: GraphFrames: An Integrated API for Mixing Graph and Relational Queries, Dave et al. 2016. They are a combination of graph and relational queries. We can use them to find complex patterns in the graph. + +The larger motifs get, the more interesting they are. Five nodes is often the limit with a Spark cluster, depending on how large your graph is. In this instance I will limit myself to a 4-path pattern as you may not have a Spark cluster on which to learn. Keep in mind that I am talking about paths - through aggregation a motif might cover thousands of nodes! + +First lets express the structural logic of the motif we are looking for. Let's try G22 - a triangle with a fourth node pointing at the node with in-degree of 2. The pattern is (a)-[e1]->(b); (a)-[e2]->(c); (c)-[e3]->(b); (d)-[e4]->(b). + +Visually this pattern looks like this: + +
+
+ G30: an opposed 3-path +
+ G30: an opposed 3-path +
+
+
+ +The simplest pattern with four nodes is a 3-path, directed graphlet G30. Let's see how aggregation makes this a more powerful pattern than we might at first guess. + +
+{% highlight python %} +# G17: A directed 3-path is a surprisingly diverse graphlet +paths = g.find("(a)-[e1]->(b); (b)-[e2]->(c); (d)-[e3]->(c)") +{% endhighlight %} +
+ +Let's count the number of instances by type for of this path in the graph. To let you know of a hard-won tip: alias the edge with its pattern. This makes it easier to read the results, even when C points to A or B, not D. + +
+{% highlight python %} +# Visualize the four-path by counting instances of paths by node / edge type +graphlet_type_df = paths.select( + F.col("a.Type").alias("A_Type"), + F.col("e1.relationship").alias("(a)-[e1]->(b)"), + F.col("b.Type").alias("B_Type"), + F.col("e2.relationship").alias("(b)-[e2]->(c)"), + F.col("c.Type").alias("C_Type"), + F.col("e3.relationship").alias("(d)-[e3]->(c)"), + F.col("d.Type").alias("D_Type"), +) +graphlet_count_df = ( + graphlet_type_df.groupby( + "A_Type", + "(a)-[e1]->(b)", + "B_Type", + "(b)-[e2]->(c)", + "C_Type", + "(d)-[e3]->(c)", + "D_Type", + ) + .count() + .orderBy(F.col("count").desc()) + # Add a comma formatted column for display + .withColumn("count", F.format_number(F.col("count"), 0)) +) +graphlet_count_df.show() +{% endhighlight %} +
+ +
+{% highlight python %} ++--------+-------------+--------+-------------+--------+-------------+--------+-------+ +| A_Type|(a)-[e1]->(b)| B_Type|(b)-[e2]->(c)| C_Type|(d)-[e3]->(c)| D_Type| count| ++--------+-------------+--------+-------------+--------+-------------+--------+-------+ +| Vote| CastFor| Answer| Answers|Question| CastFor| Vote|445,707| +| Vote| CastFor|Question| Links|Question| CastFor| Vote|300,017| +| Vote| CastFor| Answer| Answers|Question| Answers| Answer|117,981| +| Vote| CastFor|Question| Links|Question| Links|Question| 73,227| +| Vote| CastFor| Answer| Answers|Question| Tags| Tag| 64,510| +| Tag| Tags|Question| Links|Question| CastFor| Vote| 62,203| +| Answer| Answers|Question| Links|Question| CastFor| Vote| 56,119| +| Vote| CastFor|Question| Links|Question| Answers| Answer| 55,938| +| Vote| CastFor| Answer| Answers|Question| Links|Question| 55,139| +| Vote| CastFor|Question| Links|Question| Tags| Tag| 38,633| +| User| Posts| Answer| Answers|Question| CastFor| Vote| 37,655| +|Question| Links|Question| Links|Question| CastFor| Vote| 33,747| +| Vote| CastFor| Answer| Answers|Question| Asks| User| 23,234| +| User| Asks|Question| Links|Question| CastFor| Vote| 22,243| +| Tag| Tags|Question| Links|Question| Links|Question| 17,266| +| Answer| Answers|Question| Links|Question| Links|Question| 16,362| +| Answer| Answers|Question| Links|Question| Answers| Answer| 14,013| +| Vote| CastFor|Question| Links|Question| Asks| User| 13,252| +| Tag| Tags|Question| Links|Question| Answers| Answer| 12,920| +| User| Posts| Answer| Answers|Question| Answers| Answer| 12,105| ++--------+-------------+--------+-------------+--------+-------------+--------+-------+ +only showing top 20 rows +{% endhighlight %} +
+ +How many of these motifs are there in the graph? Let's count them. + +
+{% highlight python %} +graphlet_count_df.count() +104 +{% endhighlight %} +
+ +104 - we hit the network motif jackpot with this pattern! Let's order by the successive elements of the pattern to group them logically. + +
+{% highlight python %} +graphlet_count_df.orderBy([ + "A_Type", + "(a)-[e1]->(b)", + "B_Type", + "(b)-[e2]->(c)", + "C_Type", + "(d)-[e3]->(c)", + "D_Type", +], ascending=False).show(104) +{% endhighlight %} +
+ +
+{% highlight python %} ++--------+-------------+--------+-------------+--------+-------------+--------+-------+ +| A_Type|(a)-[e1]->(b)| B_Type|(b)-[e2]->(c)| C_Type|(d)-[e3]->(c)| D_Type| count| ++--------+-------------+--------+-------------+--------+-------------+--------+-------+ +| Vote| CastFor|Question| Links|Question| Tags| Tag| 38,633| +| Vote| CastFor|Question| Links|Question| Links|Question| 73,227| +| Vote| CastFor|Question| Links|Question| Duplicates|Question| 3,337| +| Vote| CastFor|Question| Links|Question| CastFor| Vote|300,017| +| Vote| CastFor|Question| Links|Question| Asks| User| 13,252| +| Vote| CastFor|Question| Links|Question| Answers| Answer| 55,938| +| Vote| CastFor|Question| Links| Answer| Posts| User| 18| +| Vote| CastFor|Question| Links| Answer| Links|Question| 18| +| Vote| CastFor|Question| Links| Answer| CastFor| Vote| 36| +| Vote| CastFor|Question| Duplicates|Question| Tags| Tag| 1,292| +| Vote| CastFor|Question| Duplicates|Question| Links|Question| 1,556| +| Vote| CastFor|Question| Duplicates|Question| Duplicates|Question| 693| +| Vote| CastFor|Question| Duplicates|Question| CastFor| Vote| 8,205| +| Vote| CastFor|Question| Duplicates|Question| Asks| User| 418| +| Vote| CastFor|Question| Duplicates|Question| Answers| Answer| 2,423| +| Vote| CastFor| Answer| Answers|Question| Tags| Tag| 64,510| +| Vote| CastFor| Answer| Answers|Question| Links|Question| 55,139| +| Vote| CastFor| Answer| Answers|Question| Duplicates|Question| 3,941| +| Vote| CastFor| Answer| Answers|Question| CastFor| Vote|445,707| +| Vote| CastFor| Answer| Answers|Question| Asks| User| 23,234| +| Vote| CastFor| Answer| Answers|Question| Answers| Answer|117,981| +| User| Posts| Answer| Answers|Question| Tags| Tag| 7,164| +| User| Posts| Answer| Answers|Question| Links|Question| 4,494| +| User| Posts| Answer| Answers|Question| Duplicates|Question| 378| +| User| Posts| Answer| Answers|Question| CastFor| Vote| 37,655| +| User| Posts| Answer| Answers|Question| Asks| User| 2,614| +| User| Posts| Answer| Answers|Question| Answers| Answer| 12,105| +| User| Asks|Question| Links|Question| Tags| Tag| 3,169| +| User| Asks|Question| Links|Question| Links|Question| 6,119| +| User| Asks|Question| Links|Question| Duplicates|Question| 331| +| User| Asks|Question| Links|Question| CastFor| Vote| 22,243| +| User| Asks|Question| Links|Question| Asks| User| 1,064| +| User| Asks|Question| Links|Question| Answers| Answer| 4,599| +| User| Asks|Question| Links| Answer| Posts| User| 1| +| User| Asks|Question| Links| Answer| Links|Question| 1| +| User| Asks|Question| Links| Answer| CastFor| Vote| 2| +| User| Asks|Question| Duplicates|Question| Tags| Tag| 264| +| User| Asks|Question| Duplicates|Question| Links|Question| 338| +| User| Asks|Question| Duplicates|Question| Duplicates|Question| 134| +| User| Asks|Question| Duplicates|Question| CastFor| Vote| 1,528| +| User| Asks|Question| Duplicates|Question| Asks| User| 86| +| User| Asks|Question| Duplicates|Question| Answers| Answer| 374| +| Tag| Tags|Question| Links|Question| Tags| Tag| 9,332| +| Tag| Tags|Question| Links|Question| Links|Question| 17,266| +| Tag| Tags|Question| Links|Question| Duplicates|Question| 931| +| Tag| Tags|Question| Links|Question| CastFor| Vote| 62,203| +| Tag| Tags|Question| Links|Question| Asks| User| 3,037| +| Tag| Tags|Question| Links|Question| Answers| Answer| 12,920| +| Tag| Tags|Question| Links| Answer| Posts| User| 8| +| Tag| Tags|Question| Links| Answer| Links|Question| 8| +| Tag| Tags|Question| Links| Answer| CastFor| Vote| 16| +| Tag| Tags|Question| Duplicates|Question| Tags| Tag| 666| +| Tag| Tags|Question| Duplicates|Question| Links|Question| 828| +| Tag| Tags|Question| Duplicates|Question| Duplicates|Question| 341| +| Tag| Tags|Question| Duplicates|Question| CastFor| Vote| 3,715| +| Tag| Tags|Question| Duplicates|Question| Asks| User| 215| +| Tag| Tags|Question| Duplicates|Question| Answers| Answer| 965| +|Question| Links|Question| Links|Question| Tags| Tag| 5,220| +|Question| Links|Question| Links|Question| Links|Question| 10,140| +|Question| Links|Question| Links|Question| Duplicates|Question| 387| +|Question| Links|Question| Links|Question| CastFor| Vote| 33,747| +|Question| Links|Question| Links|Question| Asks| User| 1,740| +|Question| Links|Question| Links|Question| Answers| Answer| 7,330| +|Question| Links|Question| Links| Answer| Posts| User| 2| +|Question| Links|Question| Links| Answer| Links|Question| 2| +|Question| Links|Question| Links| Answer| CastFor| Vote| 4| +|Question| Links|Question| Duplicates|Question| Tags| Tag| 102| +|Question| Links|Question| Duplicates|Question| Links|Question| 163| +|Question| Links|Question| Duplicates|Question| Duplicates|Question| 85| +|Question| Links|Question| Duplicates|Question| CastFor| Vote| 611| +|Question| Links|Question| Duplicates|Question| Asks| User| 45| +|Question| Links|Question| Duplicates|Question| Answers| Answer| 308| +|Question| Links| Answer| Answers|Question| Tags| Tag| 4| +|Question| Links| Answer| Answers|Question| Links|Question| 4| +|Question| Links| Answer| Answers|Question| CastFor| Vote| 10| +|Question| Links| Answer| Answers|Question| Asks| User| 2| +|Question| Links| Answer| Answers|Question| Answers| Answer| 17| +|Question| Duplicates|Question| Links|Question| Tags| Tag| 328| +|Question| Duplicates|Question| Links|Question| Links|Question| 511| +|Question| Duplicates|Question| Links|Question| Duplicates|Question| 38| +|Question| Duplicates|Question| Links|Question| CastFor| Vote| 2,019| +|Question| Duplicates|Question| Links|Question| Asks| User| 125| +|Question| Duplicates|Question| Links|Question| Answers| Answer| 559| +|Question| Duplicates|Question| Duplicates|Question| Tags| Tag| 19| +|Question| Duplicates|Question| Duplicates|Question| Links|Question| 20| +|Question| Duplicates|Question| Duplicates|Question| Duplicates|Question| 17| +|Question| Duplicates|Question| Duplicates|Question| CastFor| Vote| 98| +|Question| Duplicates|Question| Duplicates|Question| Asks| User| 9| +|Question| Duplicates|Question| Duplicates|Question| Answers| Answer| 67| +| Answer| Answers|Question| Links|Question| Tags| Tag| 8,187| +| Answer| Answers|Question| Links|Question| Links|Question| 16,362| +| Answer| Answers|Question| Links|Question| Duplicates|Question| 811| +| Answer| Answers|Question| Links|Question| CastFor| Vote| 56,119| +| Answer| Answers|Question| Links|Question| Asks| User| 2,758| +| Answer| Answers|Question| Links|Question| Answers| Answer| 14,013| +| Answer| Answers|Question| Links| Answer| Posts| User| 2| +| Answer| Answers|Question| Links| Answer| Links|Question| 2| +| Answer| Answers|Question| Links| Answer| CastFor| Vote| 4| +| Answer| Answers|Question| Duplicates|Question| Tags| Tag| 224| +| Answer| Answers|Question| Duplicates|Question| Links|Question| 316| +| Answer| Answers|Question| Duplicates|Question| Duplicates|Question| 198| +| Answer| Answers|Question| Duplicates|Question| CastFor| Vote| 1,330| +| Answer| Answers|Question| Duplicates|Question| Asks| User| 110| +| Answer| Answers|Question| Duplicates|Question| Answers| Answer| 1,174| ++--------+-------------+--------+-------------+--------+-------------+--------+-------+ +{% endhighlight %} +
+ +The fourth row catches my eye - there are 300,017 matches for the votes cast for linked questions: (Vote A)-[CastFor]->(Question B); (Question B)-[Links]->(Question C); (Vote D)-[CastFor]->(Question C). This gives a way to compare the popularity of linked questions! Let's calculate how correlated linked questions are. + +
+{% highlight python %} +# A user answers an answer that answers a question that links to an answer. +linked_vote_paths = paths.filter( + (F.col("a.Type") == "Vote") & + (F.col("e1.relationship") == "CastFor") & + (F.col("b.Type") == "Question") & + (F.col("e2.relationship") == "Links") & + (F.col("c.Type") == "Question") & + (F.col("e3.relationship") == "CastFor") & + (F.col("d.Type") == "Vote") +) + +# Sanity check the count - it should match the table above +linked_vote_paths.count() + +300017 +{% endhighlight %} +
+ +We start by using aggregation to count the total votes cast for each end of a link questions. To get the count for Question B, get the distinct 3-paths, group by it's ID and count the votes. + +
+{% highlight python %} +b_vote_counts = linked_vote_paths.select("a", "b").distinct().groupBy("b").count() +c_vote_counts = linked_vote_paths.select("c", "d").distinct().groupBy("c").count() +{% endhighlight %} +
+ +Now join the counts to the links to get the total votes for each pair of linked questions. Then run `pyspark.sql.DataFrame.stats.corr()` to get the correlation between the vote counts for linked questions. We'll use the `Vote.VoteTypeId` to ensure only positive votes are counted. + +
+{% highlight python %} +linked_vote_counts = ( + linked_vote_paths + .filter((F.col("a.VoteTypeId") == 2) & (F.col("d.VoteTypeId") == 2)) + .select("b", "c") + .join(b_vote_counts, on="b", how="inner") + .withColumnRenamed("count", "b_count") + .join(c_vote_counts, on="c", how="inner") + .withColumnRenamed("count", "c_count") +) +linked_vote_counts.stat.corr("b_count", "c_count") +0.4287709940689788 +{% endhighlight %} + +We conclude there is a moderate correlation in the vote counts of linked questions. This makes sense. Note that this is only the fourth row, there are many more patterns to be examined and considered. + +This is just one type of aggregation you can employ - but hopefully it illustrates the way properties and aggregation and other relational operators can transform simple pattern matching into a powerful tool for exploring a knowledge graph. + +

Conclusion

+ +In this tutorial, we learned to use GraphFrames to find network motifs in a property graph. We saw how to combine graph and relational queries to find complex patterns in the graph. We also saw how to use the properties of the nodes and edges in the paths to filter, group, and aggregate the results to form complex property graph motifs. Motif finding in GraphFrames is a powerful technique that can be used to explore and understand complex networks. Network motifs are the building blocks of complex networks. diff --git a/docs/user-guide.md b/docs/user-guide.md index 7e66f74ff..5d2a112a9 100644 --- a/docs/user-guide.md +++ b/docs/user-guide.md @@ -5,8 +5,7 @@ title: User Guide description: GraphFrames GRAPHFRAMES_VERSION user guide --- -This page gives examples of how to use GraphFrames for basic queries, motif finding, and -general graph algorithms. This includes code examples in Scala and Python. +This page gives examples of how to use GraphFrames for basic queries, motif finding, and general graph algorithms. This includes code examples in Scala and Python. * Table of contents (This text will be scraped.) {:toc} @@ -174,7 +173,9 @@ from graphframes.examples import Graphs g = Graphs(spark).friends() # Get example graph # Display the vertex and edge DataFrames + g.vertices.show() + # +--+-------+---+ # |id| name|age| # +--+-------+---+ @@ -188,6 +189,7 @@ g.vertices.show() # +--+-------+---+ g.edges.show() + # +---+---+------------+ # |src|dst|relationship| # +---+---+------------+ @@ -204,12 +206,12 @@ g.edges.show() # Get a DataFrame with columns "id" and "inDegree" (in-degree) vertexInDegrees = g.inDegrees -# Find the youngest user's age in the graph. -# This queries the vertex DataFrame. +# Find the youngest user's age in the graph +# This queries the vertex DataFrame g.vertices.groupBy().min("age").show() -# Count the number of "follows" in the graph. -# This queries the edge DataFrame. +# Count the number of "follows" in the graph +# This queries the edge DataFrame numFollows = g.edges.filter("relationship = 'follow'").count() {% endhighlight %}
@@ -218,13 +220,9 @@ numFollows = g.edges.filter("relationship = 'follow'").count() # Motif finding -Motif finding refers to searching for structural patterns in a graph. +Motif finding refers to searching for structural patterns in a graph. For an example of real-world use, check out the [Motif Finding Tutorial](motif-tutorial.html). -GraphFrame motif finding uses a simple Domain-Specific Language (DSL) for expressing structural -queries. For example, `graph.find("(a)-[e]->(b); (b)-[e2]->(a)")` will search for pairs of vertices -`a,b` connected by edges in both directions. It will return a `DataFrame` of all such -structures in the graph, with columns for each of the named elements (vertices or edges) -in the motif. In this case, the returned columns will be "a, b, e, e2." +GraphFrame motif finding uses a simple Domain-Specific Language (DSL) for expressing structural queries. For example, `graph.find("(a)-[e]->(b); (b)-[e2]->(a)")` will search for pairs of vertices `a,b` connected by edges in both directions. It will return a `DataFrame` of all such structures in the graph, with columns for each of the named elements (vertices or edges) in the motif. In this case, the returned columns will be "a, b, e, e2." DSL for expressing structural patterns: @@ -304,11 +302,11 @@ from graphframes.examples import Graphs g = Graphs(spark).friends() # Get example graph -# Search for pairs of vertices with edges in both directions between them. +# Search for pairs of vertices with edges in both directions between them motifs = g.find("(a)-[e]->(b); (b)-[e2]->(a)") motifs.show() -# More complex queries can be expressed by applying filters. +# More complex queries can be expressed by applying filters motifs.filter("b.age > 30").show() {% endhighlight %} @@ -375,14 +373,16 @@ g = Graphs(spark).friends() # Get example graph chain4 = g.find("(a)-[ab]->(b); (b)-[bc]->(c); (c)-[cd]->(d)") # Query on sequence, with state (cnt) -# (a) Define method for updating state given the next element of the motif. +# (a) Define method for updating state given the next element of the motif sumFriends =\ lambda cnt,relationship: when(relationship == "friend", cnt+1).otherwise(cnt) -# (b) Use sequence operation to apply method to sequence of elements in motif. -# In this case, the elements are the 3 edges. + +# (b) Use sequence operation to apply method to sequence of elements in motif +# In this case, the elements are the 3 edges condition =\ reduce(lambda cnt,e: sumFriends(cnt, col(e).relationship), ["ab", "bc", "cd"], lit(0)) -# (c) Apply filter to DataFrame. + +# (c) Apply filter to DataFrame chainWith2Friends2 = chain4.where(condition >= 2) chainWith2Friends2.show() {% endhighlight %} @@ -428,8 +428,8 @@ from graphframes.examples import Graphs g = Graphs(spark).friends() # Get example graph -# Select subgraph of users older than 30, and relationships of type "friend". -# Drop isolated vertices (users) which are not contained in any edges (relationships). +# Select subgraph of users older than 30, and relationships of type "friend" +# Drop isolated vertices (users) which are not contained in any edges (relationships) g1 = g.filterVertices("age > 30").filterEdges("relationship = 'friend'").dropIsolatedVertices() {% endhighlight %} @@ -470,15 +470,17 @@ from graphframes.examples import Graphs g = Graphs(spark).friends() # Get example graph # Select subgraph based on edges "e" of type "follow" -# pointing from a younger user "a" to an older user "b". +# pointing from a younger user "a" to an older user "b" paths = g.find("(a)-[e]->(b)")\ .filter("e.relationship = 'follow'")\ .filter("a.age < b.age") -# "paths" contains vertex info. Extract the edges. + +# "paths" contains vertex info. Extract the edges + e2 = paths.select("e.src", "e.dst", "e.relationship") -# In Spark 1.5+, the user may simplify this call: -# val e2 = paths.select("e.*") +# In Spark 1.5+, the user may simplify this call +# val e2 = paths.select("e.*") # Construct the subgraph g2 = GraphFrame(g.vertices, e2) {% endhighlight %} @@ -539,11 +541,11 @@ from graphframes.examples import Graphs g = Graphs(spark).friends() # Get example graph -# Search from "Esther" for users of age < 32. +# Search from "Esther" for users of age < 32 paths = g.bfs("name = 'Esther'", "age < 32") paths.show() -# Specify edge filters or max path lengths. +# Specify edge filters or max path lengths g.bfs("name = 'Esther'", "age < 32",\ edgeFilter="relationship != 'friend'", maxPathLength=3) {% endhighlight %} @@ -741,15 +743,16 @@ from graphframes.examples import Graphs g = Graphs(spark).friends() # Get example graph -# Run PageRank until convergence to tolerance "tol". +# Run PageRank until convergence to tolerance "tol" results = g.pageRank(resetProbability=0.15, tol=0.01) + # Display resulting pageranks and final edge weights -# Note that the displayed pagerank may be truncated, e.g., missing the E notation. -# In Spark 1.5+, you can use show(truncate=False) to avoid truncation. +# Note that the displayed pagerank may be truncated, e.g., missing the E notation +# In Spark 1.5+, you can use show(truncate=False) to avoid truncation results.vertices.select("id", "pagerank").show() results.edges.select("src", "dst", "weight").show() -# Run PageRank for a fixed number of iterations. +# Run PageRank for a fixed number of iterations results2 = g.pageRank(resetProbability=0.15, maxIter=10) # Run PageRank personalized for vertex "a" @@ -874,15 +877,15 @@ from graphframes.examples import Graphs g = Graphs(spark).friends() # Get example graph -# Save vertices and edges as Parquet to some location. +# Save vertices and edges as Parquet to some location g.vertices.write.parquet("hdfs://myLocation/vertices") g.edges.write.parquet("hdfs://myLocation/edges") -# Load the vertices and edges back. +# Load the vertices and edges back sameV = spark.read.parquet("hdfs://myLocation/vertices") sameE = spark.read.parquet("hdfs://myLocation/edges") -# Create an identical GraphFrame. +# Create an identical GraphFrame sameG = GraphFrame(sameV, sameE) {% endhighlight %} @@ -945,7 +948,7 @@ from pyspark.sql.functions import sum as sqlsum g = Graphs(spark).friends() # Get example graph -# For each user, sum the ages of the adjacent users. +# For each user, sum the ages of the adjacent users msgToSrc = AM.dst["age"] msgToDst = AM.src["age"] agg = g.aggregateMessages( @@ -1038,3 +1041,8 @@ val g2: GraphFrame = GraphFrame.fromGraphX(gx) These conversions are only supported in Scala since GraphX does not have a Python API. + +# GraphFrames Internals + +To learn how GraphFrames works internally to combine graph and relational queries, check out the paper [GraphFrames: An Integrated API for Mixing Graph and +Relational Queries, Dave et al. 2016](https://people.eecs.berkeley.edu/~matei/papers/2016/grades_graphframes.pdf). From 60d2ff3a402f38e623b7dc968c249384782e2f0b Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sat, 15 Feb 2025 20:25:06 -0800 Subject: [PATCH 02/69] Updated latest version to v0.8.4, which I verified is in Spark-Packages --- README.md | 11 ++++++----- docs/quick-start.md | 4 ++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index fa55a5bb3..23e72e9b1 100644 --- a/README.md +++ b/README.md @@ -16,13 +16,13 @@ The easiest way to start using GraphFrames is through the [Spark Packages system ```bash # Interactive Scala/Java -$ spark-shell --packages graphframes:graphframes:0.8.3-spark3.5-s_2.12 +$ spark-shell --packages graphframes:graphframes:0.8.4-spark3.5-s_2.12 # Interactive Python -$ pyspark --packages graphframes:graphframes:0.8.3-spark3.5-s_2.12 +$ pyspark --packages graphframes:graphframes:0.8.4-spark3.5-s_2.12 # Submit a script in Scala/Java/Python -$ spark-submit --packages graphframes:graphframes:0.8.3-spark3.5-s_2.12 script.py +$ spark-submit --packages graphframes:graphframes:0.8.4-spark3.5-s_2.12 script.py ``` Now you can create a GraphFrame as follows. @@ -130,14 +130,15 @@ g.connectedComponents().show() ## Learn GraphFrames To learn more about GraphFrames, check out these resources: - +* [GraphFrames Documentation](https://graphframes.github.io/graphframes) * [GraphFrames Network Motif Finding Tutorial](https://graphframes.github.io/graphframes/docs/_site/motif-tutorial.html) +* [GraphFrames Google Group](https://groups.google.com/forum/#!forum/graphframes) * [Introducing GraphFrames](https://databricks.com/blog/2016/03/03/introducing-graphframes.html) * [On-Time Flight Performance with GraphFrames for Apache Spark](https://databricks.com/blog/2016/03/16/on-time-flight-performance-with-graphframes-for-apache-spark.html) ## GraphFrames on PyPI is Unofficial -The project is not in ownership or control of the [graphframes PyPI package](https://pypi.org/project/graphframes/) (installs 0.6.0) or [graphframes-latest PyPI package](https://pypi.org/project/graphframes-latest/) (installs 0.8.3). We recommend using the Spark Packages system to install the latest version of GraphFrames. The PyPI packages are not maintained by the GraphFrames project. +The project is not in ownership or control of the [graphframes PyPI package](https://pypi.org/project/graphframes/) (installs 0.6.0) or [graphframes-latest PyPI package](https://pypi.org/project/graphframes-latest/) (installs 0.8.4). We recommend using the Spark Packages system to install the latest version of GraphFrames. The PyPI packages are not maintained by the GraphFrames project. If you are in control of one of these packages, please reach out to us to discuss how we can work together to keep them up to date. Hopefully this situation will be addressed in the near future. diff --git a/docs/quick-start.md b/docs/quick-start.md index 56ec541f6..f7e16c8ce 100644 --- a/docs/quick-start.md +++ b/docs/quick-start.md @@ -30,7 +30,7 @@ We use the `--packages` argument to download the graphframes package and any dep
{% highlight bash %} -$ ./bin/spark-shell --packages graphframes:graphframes:0.8.3-spark3.5-s_2.12 +$ ./bin/spark-shell --packages graphframes:graphframes:0.8.4-spark3.5-s_2.12 {% endhighlight %}
@@ -38,7 +38,7 @@ $ ./bin/spark-shell --packages graphframes:graphframes:0.8.3-spark3.5-s_2.12
{% highlight bash %} -$ ./bin/pyspark --packages graphframes:graphframes:0.8.3-spark3.5-s_2.12 +$ ./bin/pyspark --packages graphframes:graphframes:0.8.4-spark3.5-s_2.12 {% endhighlight %}
From 42a13b03fd46146aa20eafe1c4cd04dbf510e128 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sat, 15 Feb 2025 20:29:22 -0800 Subject: [PATCH 03/69] Added GraphFrames and Maven / sbt instructions in README --- README.md | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/README.md b/README.md index 23e72e9b1..8c2c2d88e 100644 --- a/README.md +++ b/README.md @@ -144,6 +144,44 @@ If you are in control of one of these packages, please reach out to us to discus See [Installation and Quick-Start](#installation-and-quick-start) for the best way to install and use GraphFrames. +## GraphFrames and sbt + +If you use the sbt-spark-package plugin, in your sbt build file, add the following, pulled from [GraphFrames on Spark Packages](https://spark-packages.org/package/graphframes/graphframes): + +``` +spDependencies += "graphframes/graphframes:0.8.4-spark3.5-s_2.12" +``` + +Otherwise, + +``` +resolvers += "Spark Packages Repo" at "https://repos.spark-packages.org/" + +libraryDependencies += "graphframes" % "graphframes" % "0.8.4-spark3.5-s_2.12" +``` + +## GraphFrames and Maven + +GraphFrames is not on Maven Central Repository but we are going to restore it soon. For now use Spark Packages system to install the package: [https://spark-packages.org/package/graphframes/graphframes](https://spark-packages.org/package/graphframes/graphframes). + +```xml + + + + graphframes + graphframes + 0.8.4-spark3.5-s_2.12 + + + + + + SparkPackagesRepo + https://repos.spark-packages.org/ + + +``` + ## GraphFrames Internals To learn how GraphFrames works internally to combine graph and relational queries, check out the paper [GraphFrames: An Integrated API for Mixing Graph and From 1370a1aaf7aab26950537e580e04964e7c5f8452 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sat, 15 Feb 2025 20:30:35 -0800 Subject: [PATCH 04/69] v0.8.5 --> 0.8.4 --- docs/_config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_config.yml b/docs/_config.yml index 379fc242f..4c1ab075c 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -13,7 +13,7 @@ include: # These allow the documentation to be updated with newer releases # of Spark, Scala, and Mesos. -GRAPHFRAMES_VERSION: 0.8.5 +GRAPHFRAMES_VERSION: 0.8.4 #SCALA_BINARY_VERSION: "2.10" #SCALA_VERSION: "2.10.4" #MESOS_VERSION: 0.21.0 From f4e9cdbb9c1d56195c04e3142e01b7b77198085d Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sat, 15 Feb 2025 20:58:48 -0800 Subject: [PATCH 05/69] Converted tests to pytest. Build a Python package. Update requirements.txt and split out requirements-dev.txt. Version bumps. --- .github/workflows/python-ci.yml | 7 +- .gitignore | 10 + Dockerfile | 10 +- VERSION | 0 build.sbt | 2 +- docs/_config.yml | 2 +- python/.gitignore | 4 - python/MANIFEST.in | 4 + python/graphframes/tests.py | 405 ++++++++++++++++++-------------- python/requirements-dev.txt | 6 + python/requirements.txt | 5 +- python/run-tests.sh | 17 +- python/setup.cfg | 44 +++- python/setup.py | 37 ++- version.sbt | 2 +- 15 files changed, 342 insertions(+), 213 deletions(-) delete mode 100644 VERSION delete mode 100644 python/.gitignore create mode 100644 python/requirements-dev.txt diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index 8b84d6d82..36b6b97e7 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -7,8 +7,8 @@ jobs: matrix: include: - spark-version: 3.5.4 - scala-version: 2.12.18 - python-version: 3.9.19 + scala-version: 2.12.20 + python-version: 3.11.11 runs-on: ubuntu-22.04 env: # define Java options for both official sbt and sbt-extras @@ -35,8 +35,11 @@ jobs: run: | python -m pip install --upgrade pip wheel pip install -r ./python/requirements.txt + pip install -r ./python/requirements-dev.txt pip install pyspark==${{ matrix.spark-version }} - name: Test run: | + python python/setup.py install + python python/setup.py bdist_wheel export SPARK_HOME=$(python -c "import os; from importlib.util import find_spec; print(os.path.join(os.path.dirname(find_spec('pyspark').origin)))") ./python/run-tests.sh diff --git a/.gitignore b/.gitignore index a07973c1e..dcbde8186 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,13 @@ project/plugins/project/ # Mac *.DS_Store +.vscode + +# Python specific +python/build +python/dist +build/lib +python/graphframes.egg-info +python/graphframes/tutorials/data +python/docs/_build +python/docs/_site diff --git a/Dockerfile b/Dockerfile index 1c4430912..b9fe8c528 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,16 +1,16 @@ FROM ubuntu:22.04 -ARG PYTHON_VERSION=3.8 +ARG PYTHON_VERSION=3.9 ARG DEBIAN_FRONTEND=noninteractive RUN apt-get update && \ - apt-get install -y wget bzip2 build-essential openjdk-8-jdk ssh sudo && \ + apt-get install -y wget bzip2 build-essential openjdk-11-jdk ssh sudo && \ apt-get clean # Install Spark and update env variables. -ENV SCALA_VERSION 2.12.17 -ENV SPARK_VERSION "3.4.1" -ENV SPARK_BUILD "spark-${SPARK_VERSION}-bin-hadoop3.2" +ENV SCALA_VERSION 2.12.20 +ENV SPARK_VERSION "3.5.4" +ENV SPARK_BUILD "spark-${SPARK_VERSION}-bin-hadoop3" ENV SPARK_BUILD_URL "https://dist.apache.org/repos/dist/release/spark/spark-${SPARK_VERSION}/${SPARK_BUILD}.tgz" RUN wget --quiet "$SPARK_BUILD_URL" -O /tmp/spark.tgz && \ tar -C /opt -xf /tmp/spark.tgz && \ diff --git a/VERSION b/VERSION deleted file mode 100644 index e69de29bb..000000000 diff --git a/build.sbt b/build.sbt index 061901717..63168c57d 100644 --- a/build.sbt +++ b/build.sbt @@ -3,7 +3,7 @@ import ReleaseTransformations._ lazy val sparkVer = sys.props.getOrElse("spark.version", "3.5.4") lazy val sparkBranch = sparkVer.substring(0, 3) lazy val defaultScalaVer = sparkBranch match { - case "3.5" => "2.12.18" + case "3.5" => "2.12.20" case _ => throw new IllegalArgumentException(s"Unsupported Spark version: $sparkVer.") } lazy val scalaVer = sys.props.getOrElse("scala.version", defaultScalaVer) diff --git a/docs/_config.yml b/docs/_config.yml index 4c1ab075c..379fc242f 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -13,7 +13,7 @@ include: # These allow the documentation to be updated with newer releases # of Spark, Scala, and Mesos. -GRAPHFRAMES_VERSION: 0.8.4 +GRAPHFRAMES_VERSION: 0.8.5 #SCALA_BINARY_VERSION: "2.10" #SCALA_VERSION: "2.10.4" #MESOS_VERSION: 0.21.0 diff --git a/python/.gitignore b/python/.gitignore deleted file mode 100644 index 81410ca55..000000000 --- a/python/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -*.pyc -docs/_build/ -build/ -dist/ diff --git a/python/MANIFEST.in b/python/MANIFEST.in index 73eaf8ba2..4eb0ee5af 100644 --- a/python/MANIFEST.in +++ b/python/MANIFEST.in @@ -2,3 +2,7 @@ # https://github.com/pypa/sampleproject/blob/master/MANIFEST.in # For more details about the MANIFEST file, you may read the docs at # https://docs.python.org/2/distutils/sourcedist.html#the-manifest-in-template +recursive-include python/graphframes *.py +recursive-exclude * __pycache__ +recursive-exclude * *.pyc +include graphframes/tutorials/data/.exists diff --git a/python/graphframes/tests.py b/python/graphframes/tests.py index 9a7ad1371..259435759 100644 --- a/python/graphframes/tests.py +++ b/python/graphframes/tests.py @@ -15,63 +15,72 @@ # limitations under the License. # -import sys +import os import tempfile import shutil import re -if sys.version_info[:2] <= (2, 6): - try: - import unittest2 as unittest - except ImportError: - sys.stderr.write('Please install unittest2 to test with Python 2.6 or earlier') - sys.exit(1) -else: - import unittest - -from pyspark import SparkContext -from pyspark.sql import functions as sqlfunctions, SparkSession +import pytest +from pyspark import SparkConf, SparkContext +from pyspark.sql import functions as F, SparkSession from .graphframe import GraphFrame, Pregel, _java_api, _from_java_gf from .lib import AggregateMessages as AM from .examples import Graphs, BeliefPropagation + +VERSION = open("version.sbt").read().strip() + + +@pytest.fixture(scope="class", autouse=True) +def set_spark(request, spark_session): + request.cls.spark = spark_session + + +@pytest.mark.usefixtures("set_spark") class GraphFrameTestUtils(object): @classmethod def parse_spark_version(cls, version_str): - """ take an input version string - return version items in a dictionary + """take an input version string + return version items in a dictionary """ - _sc_ver_patt = r'(\d+)\.(\d+)(\.(\d+)(-(.+))?)?' + _sc_ver_patt = r"(\d+)\.(\d+)(\.(\d+)(-(.+))?)?" m = re.match(_sc_ver_patt, version_str) if not m: - raise TypeError("version {} shoud be in ..".format(version_str)) + raise TypeError( + "version {} shoud be in ..".format(version_str) + ) version_info = {} try: - version_info['major'] = int(m.group(1)) + version_info["major"] = int(m.group(1)) except: raise TypeError("invalid minor version") try: - version_info['minor'] = int(m.group(2)) + version_info["minor"] = int(m.group(2)) except: raise TypeError("invalid major version") try: - version_info['maintenance'] = int(m.group(4)) + version_info["maintenance"] = int(m.group(4)) except: - version_info['maintenance'] = 0 + version_info["maintenance"] = 0 try: - version_info['special'] = m.group(6) + version_info["special"] = m.group(6) except: pass return version_info @classmethod def createSparkContext(cls): - cls.sc = sc = SparkContext('local[4]', "GraphFramesTests") + cls.conf = SparkConf().setAppName("GraphFramesTests") + cls.conf.set( + "spark.submit.pyFiles", + os.path.abspath("python/dist/graphframes-{VERSION}-py3-none-any.whl"), + ) + cls.sc = SparkContext(master="local[4]", appName="GraphFramesTests", conf=cls.conf) cls.checkpointDir = tempfile.mkdtemp() cls.sc.setCheckpointDir(cls.checkpointDir) - cls.spark_version = cls.parse_spark_version(sc.version) + cls.spark_version = cls.parse_spark_version(cls.sc.version) @classmethod def stopSparkContext(cls): @@ -81,10 +90,10 @@ def stopSparkContext(cls): @classmethod def spark_at_least_of_version(cls, version_str): - assert hasattr(cls, 'spark_version') + assert hasattr(cls, "spark_version") required_version = cls.parse_spark_version(version_str) spark_version = cls.spark_version - for _name in ['major', 'minor', 'maintenance']: + for _name in ["major", "minor", "maintenance"]: sc_ver = spark_version[_name] req_ver = required_version[_name] if sc_ver != req_ver: @@ -92,28 +101,31 @@ def spark_at_least_of_version(cls, version_str): # All major.minor.maintenance equal return True -def setUpModule(): - GraphFrameTestUtils.createSparkContext() -def tearDownModule(): +@pytest.fixture(scope="module", autouse=True) +def spark_context(): + GraphFrameTestUtils.createSparkContext() + yield GraphFrameTestUtils.stopSparkContext() -class GraphFrameTestCase(unittest.TestCase): +@pytest.fixture(scope="class") +def spark_session(): + # Create a SparkSession with a smaller number of shuffle partitions. + spark = ( + SparkSession(GraphFrameTestUtils.sc) + .builder.config("spark.sql.shuffle.partitions", 4) + .getOrCreate() + ) + yield spark + # No explicit stop; SparkContext shutdown will clean up. - @classmethod - def setUpClass(cls): - # Small tests run much faster with spark.sql.shuffle.partitions = 4 - cls.spark = SparkSession(GraphFrameTestUtils.sc).builder.config('spark.sql.shuffle.partitions', 4).getOrCreate() - - @classmethod - def tearDownClass(cls): - cls.spark = None +@pytest.mark.usefixtures("set_spark") +class GraphFrameTest: -class GraphFrameTest(GraphFrameTestCase): - def setUp(self): - super(GraphFrameTest, self).setUp() + def setup_method(self, method): + # Mimic setUp: create a simple GraphFrame instance for each test. localVertices = [(1, "A"), (2, "B"), (3, "C")] localEdges = [(1, 2, "love"), (2, 1, "hate"), (2, 3, "follow")] v = self.spark.createDataFrame(localVertices, ["id", "name"]) @@ -123,28 +135,38 @@ def setUp(self): def test_spark_version_check(self): gtu = GraphFrameTestUtils gtu.spark_version = gtu.parse_spark_version("2.0.2") - self.assertTrue(gtu.spark_at_least_of_version("1.7")) - self.assertTrue(gtu.spark_at_least_of_version("2.0")) - self.assertTrue(gtu.spark_at_least_of_version("2.0.1")) - self.assertTrue(gtu.spark_at_least_of_version("2.0.2")) - self.assertFalse(gtu.spark_at_least_of_version("2.0.3")) - self.assertFalse(gtu.spark_at_least_of_version("2.1")) + + assert gtu.spark_at_least_of_version("1.7") + assert gtu.spark_at_least_of_version("2.0") + assert gtu.spark_at_least_of_version("2.0.1") + assert gtu.spark_at_least_of_version("2.0.2") + assert not gtu.spark_at_least_of_version("2.0.3") + assert not gtu.spark_at_least_of_version("2.1") def test_construction(self): g = self.g - vertexIDs = map(lambda x: x[0], g.vertices.select("id").collect()) + vertexIDs = [row[0] for row in g.vertices.select("id").collect()] assert sorted(vertexIDs) == [1, 2, 3] - edgeActions = map(lambda x: x[0], g.edges.select("action").collect()) + + edgeActions = [row[0] for row in g.edges.select("action").collect()] assert sorted(edgeActions) == ["follow", "hate", "love"] - tripletsFirst = list(map(lambda x: (x[0][1], x[1][1], x[2][2]), - g.triplets.sort("src.id").select("src", "dst", "edge").take(1))) + + tripletsFirst = list( + map( + lambda x: (x[0][1], x[1][1], x[2][2]), + g.triplets.sort("src.id").select("src", "dst", "edge").take(1), + ) + ) assert tripletsFirst == [("A", "B", "love")], tripletsFirst + # Try with invalid vertices and edges DataFrames v_invalid = self.spark.createDataFrame( - [(1, "A"), (2, "B"), (3, "C")], ["invalid_colname_1", "invalid_colname_2"]) + [(1, "A"), (2, "B"), (3, "C")], ["invalid_colname_1", "invalid_colname_2"] + ) e_invalid = self.spark.createDataFrame( - [(1, 2), (2, 3), (3, 1)], ["invalid_colname_3", "invalid_colname_4"]) - with self.assertRaises(ValueError): + [(1, 2), (2, 3), (3, 1)], ["invalid_colname_3", "invalid_colname_4"] + ) + with pytest.raises(ValueError): GraphFrame(v_invalid, e_invalid) def test_cache(self): @@ -155,17 +177,17 @@ def test_cache(self): def test_degrees(self): g = self.g outDeg = g.outDegrees - self.assertSetEqual(set(outDeg.columns), {"id", "outDegree"}) + assert set(outDeg.columns) == {"id", "outDegree"} inDeg = g.inDegrees - self.assertSetEqual(set(inDeg.columns), {"id", "inDegree"}) + assert set(inDeg.columns) == {"id", "inDegree"} deg = g.degrees - self.assertSetEqual(set(deg.columns), {"id", "degree"}) + assert set(deg.columns) == {"id", "degree"} def test_motif_finding(self): g = self.g motifs = g.find("(a)-[e]->(b)") assert motifs.count() == 3 - self.assertSetEqual(set(motifs.columns), {"a", "e", "b"}) + assert set(motifs.columns) == {"a", "e", "b"} def test_filterVertices(self): g = self.g @@ -178,8 +200,8 @@ def test_filterVertices(self): e2 = g2.edges.select("src", "dst", "action").collect() assert len(v2) == len(expected_v) assert len(e2) == len(expected_e) - self.assertSetEqual(set(v2), set(expected_v)) - self.assertSetEqual(set(e2), set(expected_e)) + assert set(v2) == set(expected_v) + assert set(e2) == set(expected_e) def test_filterEdges(self): g = self.g @@ -192,8 +214,8 @@ def test_filterEdges(self): e2 = g2.edges.select("src", "dst", "action").collect() assert len(v2) == len(expected_v) assert len(e2) == len(expected_e) - self.assertSetEqual(set(v2), set(expected_v)) - self.assertSetEqual(set(e2), set(expected_e)) + assert set(v2) == set(expected_v) + assert set(e2) == set(expected_e) def test_dropIsolatedVertices(self): g = self.g @@ -204,74 +226,93 @@ def test_dropIsolatedVertices(self): expected_e = [(2, 3, "follow")] assert len(v2) == len(expected_v) assert len(e2) == len(expected_e) - self.assertSetEqual(set(v2), set(expected_v)) - self.assertSetEqual(set(e2), set(expected_e)) + assert set(v2) == set(expected_v) + assert set(e2) == set(expected_e) def test_bfs(self): g = self.g paths = g.bfs("name='A'", "name='C'") - self.assertEqual(paths.count(), 1) - self.assertEqual(paths.select("v1.name").head()[0], "B") + assert paths.count() == 1 + # Expecting that the first intermediary vertex in the BFS is "B" + assert paths.select("v1.name").head()[0] == "B" + paths2 = g.bfs("name='A'", "name='C'", edgeFilter="action!='follow'") - self.assertEqual(paths2.count(), 0) + assert paths2.count() == 0 + paths3 = g.bfs("name='A'", "name='C'", maxPathLength=1) - self.assertEqual(paths3.count(), 0) + assert paths3.count() == 0 -class PregelTest(GraphFrameTestCase): - def setUp(self): - super(PregelTest, self).setUp() +@pytest.mark.usefixtures("set_spark") +class TestPregel: def test_page_rank(self): - from pyspark.sql.functions import coalesce, col, lit, sum, when - edges = self.spark.createDataFrame([[0, 1], - [1, 2], - [2, 4], - [2, 0], - [3, 4], # 3 has no in-links - [4, 0], - [4, 2]], ["src", "dst"]) + # Create an edge DataFrame; note that vertex 3 has no in-links. + edges = self.spark.createDataFrame( + [[0, 1], [1, 2], [2, 4], [2, 0], [3, 4], [4, 0], [4, 2]], + ["src", "dst"], + ) edges.cache() + + # Create a vertex DataFrame and count vertices. vertices = self.spark.createDataFrame([[0], [1], [2], [3], [4]], ["id"]) numVertices = vertices.count() + + # Get the outDegrees DataFrame from a GraphFrame built on the original vertices and edges. vertices = GraphFrame(vertices, edges).outDegrees vertices.cache() + + # Construct a new GraphFrame with the updated vertices DataFrame. graph = GraphFrame(vertices, edges) alpha = 0.15 - ranks = graph.pregel \ - .setMaxIter(5) \ - .withVertexColumn("rank", lit(1.0 / numVertices), - coalesce(Pregel.msg(), - lit(0.0)) * lit(1.0 - alpha) + lit(alpha / numVertices)) \ - .sendMsgToDst(Pregel.src("rank") / Pregel.src("outDegree")) \ - .aggMsgs(sum(Pregel.msg())) \ + + # Run PageRank via Pregel. + ranks = ( + graph.pregel.setMaxIter(5) + .withVertexColumn( + "rank", + F.lit(1.0 / numVertices), + F.coalesce(Pregel.msg(), F.lit(0.0)) * F.lit(1.0 - alpha) + + F.lit(alpha / numVertices), + ) + .sendMsgToDst(Pregel.src("rank") / Pregel.src("outDegree")) + .aggMsgs(F.sum(Pregel.msg())) .run() + ) + + # Collect and sort results. resultRows = ranks.sort(ranks.id).collect() - result = map(lambda x: x.rank, resultRows) + result = list(map(lambda x: x.rank, resultRows)) expected = [0.245, 0.224, 0.303, 0.03, 0.197] + + # Compare each result with its expected value using a tolerance of 1e-3. for a, b in zip(result, expected): - self.assertAlmostEqual(a, b, delta = 1e-3) + assert a == pytest.approx(b, abs=1e-3) + +@pytest.mark.usefixtures("set_spark") +class TestGraphFrameLib: -class GraphFrameLibTest(GraphFrameTestCase): - def setUp(self): - super(GraphFrameLibTest, self).setUp() + def setup_method(self, method): + # Set up the Java API instance for each test. self.japi = _java_api(self.spark._sc) - def _hasCols(self, graph, vcols = [], ecols = []): - map(lambda c: self.assertIn(c, graph.vertices.columns), vcols) - map(lambda c: self.assertIn(c, graph.edges.columns), ecols) + def _hasCols(self, graph, vcols=[], ecols=[]): + for c in vcols: + assert c in graph.vertices.columns, f"Vertex DataFrame missing column: {c}" + for c in ecols: + assert c in graph.edges.columns, f"Edge DataFrame missing column: {c}" - def _df_hasCols(self, vertices, vcols = []): - map(lambda c: self.assertIn(c, vertices.columns), vcols) + def _df_hasCols(self, df, vcols=[]): + for c in vcols: + assert c in df.columns, f"DataFrame missing column: {c}" def _graph(self, name, *args): """ - Convenience to call one of the example graphs, passing the arguments and wrapping the result back - as a python object. - :param name: the name of the example graph - :param args: all the required arguments, without the initial spark session - :return: + Convenience to call one of the example graphs, passing the arguments and wrapping the result as a Python object. + :param name: the name of the example graph. + :param args: all the required arguments (excluding the initial SparkSession). + :return: a GraphFrame object. """ examples = self.japi.examples() jgraph = getattr(examples, name)(*args) @@ -281,83 +322,79 @@ def test_aggregate_messages(self): g = self._graph("friends") # For each user, sum the ages of the adjacent users, # plus 1 for the src's sum if the edge is "friend". - sendToSrc = ( - AM.dst['age'] + - sqlfunctions.when( - AM.edge['relationship'] == 'friend', - sqlfunctions.lit(1) - ).otherwise(0)) - sendToDst = AM.src['age'] + sendToSrc = AM.dst["age"] + F.when(AM.edge["relationship"] == "friend", F.lit(1)).otherwise( + 0 + ) + sendToDst = AM.src["age"] agg = g.aggregateMessages( - sqlfunctions.sum(AM.msg).alias('summedAges'), - sendToSrc=sendToSrc, - sendToDst=sendToDst) - # Run the aggregation again providing SQL expressions as String instead. + F.sum(AM.msg).alias("summedAges"), sendToSrc=sendToSrc, sendToDst=sendToDst + ) + # Run the aggregation again using SQL expressions as Strings. agg2 = g.aggregateMessages( "sum(MSG) AS `summedAges`", sendToSrc="(dst['age'] + CASE WHEN (edge['relationship'] = 'friend') THEN 1 ELSE 0 END)", - sendToDst="src['age']") - # Convert agg and agg2 to a mapping from id to the aggregated message. - aggMap = {id_: s for id_, s in agg.select('id', 'summedAges').collect()} - agg2Map = {id_: s for id_, s in agg2.select('id', 'summedAges').collect()} - # Compute the truth via brute force. - user2age = {id_: age for id_, age in g.vertices.select('id', 'age').collect()} + sendToDst="src['age']", + ) + # Build mappings from id to the aggregated message. + aggMap = {row.id: row.summedAges for row in agg.select("id", "summedAges").collect()} + agg2Map = {row.id: row.summedAges for row in agg2.select("id", "summedAges").collect()} + # Compute the expected aggregation via brute force. + user2age = {row.id: row.age for row in g.vertices.select("id", "age").collect()} trueAgg = {} - for src, dst, rel in g.edges.select("src", "dst", "relationship").collect(): - trueAgg[src] = trueAgg.get(src, 0) + user2age[dst] + (1 if rel == 'friend' else 0) + for row in g.edges.select("src", "dst", "relationship").collect(): + src, dst, rel = row.src, row.dst, row.relationship + trueAgg[src] = trueAgg.get(src, 0) + user2age[dst] + (1 if rel == "friend" else 0) trueAgg[dst] = trueAgg.get(dst, 0) + user2age[src] - # Compare if the agg mappings match the brute force mapping - self.assertEqual(aggMap, trueAgg) - self.assertEqual(agg2Map, trueAgg) - # Check that TypeError is raises with messages of wrong type - with self.assertRaises(TypeError): + # Verify both aggregations match the expected results. + assert aggMap == trueAgg, f"aggMap {aggMap} does not equal expected {trueAgg}" + assert agg2Map == trueAgg, f"agg2Map {agg2Map} does not equal expected {trueAgg}" + # Check that passing a wrong type for messages raises a TypeError. + with pytest.raises(TypeError): g.aggregateMessages( - "sum(MSG) AS `summedAges`", - sendToSrc=object(), - sendToDst="src['age']") - with self.assertRaises(TypeError): + "sum(MSG) AS `summedAges`", sendToSrc=object(), sendToDst="src['age']" + ) + with pytest.raises(TypeError): g.aggregateMessages( - "sum(MSG) AS `summedAges`", - sendToSrc=dst['age'], - sendToDst=object()) + "sum(MSG) AS `summedAges`", sendToSrc=F.col("dst")["age"], sendToDst=object() + ) def test_connected_components(self): - v = self.spark.createDataFrame([ - (0, "a", "b")], ["id", "vattr", "gender"]) + v = self.spark.createDataFrame([(0, "a", "b")], ["id", "vattr", "gender"]) e = self.spark.createDataFrame([(0, 0, 1)], ["src", "dst", "test"]).filter("src > 10") g = GraphFrame(v, e) comps = g.connectedComponents() - self._df_hasCols(comps, vcols=['id', 'component', 'vattr', 'gender']) - self.assertEqual(comps.count(), 1) + self._df_hasCols(comps, vcols=["id", "component", "vattr", "gender"]) + assert comps.count() == 1 def test_connected_components2(self): v = self.spark.createDataFrame([(0, "a0", "b0"), (1, "a1", "b1")], ["id", "A", "B"]) e = self.spark.createDataFrame([(0, 1, "a01", "b01")], ["src", "dst", "A", "B"]) g = GraphFrame(v, e) comps = g.connectedComponents() - self._df_hasCols(comps, vcols=['id', 'component', 'A', 'B']) - self.assertEqual(comps.count(), 2) + self._df_hasCols(comps, vcols=["id", "component", "A", "B"]) + assert comps.count() == 2 def test_connected_components_friends(self): g = self._graph("friends") - comps_tests = [] - comps_tests += [g.connectedComponents()] - comps_tests += [g.connectedComponents(broadcastThreshold=1)] - comps_tests += [g.connectedComponents(checkpointInterval=0)] - comps_tests += [g.connectedComponents(checkpointInterval=10)] - comps_tests += [g.connectedComponents(algorithm="graphx")] + comps_tests = [ + g.connectedComponents(), + g.connectedComponents(broadcastThreshold=1), + g.connectedComponents(checkpointInterval=0), + g.connectedComponents(checkpointInterval=10), + g.connectedComponents(algorithm="graphx"), + ] for c in comps_tests: - self.assertEqual(c.groupBy("component").count().count(), 2) + assert c.groupBy("component").count().count() == 2 def test_label_progagation(self): n = 5 g = self._graph("twoBlobs", n) labels = g.labelPropagation(maxIter=4 * n) labels1 = labels.filter("id < 5").select("label").collect() - all1 = set([x.label for x in labels1]) + all1 = {row.label for row in labels1} assert len(all1) == 1 labels2 = labels.filter("id >= 5").select("label").collect() - all2 = set([x.label for x in labels2]) + all2 = {row.label for row in labels2} assert len(all2) == 1 assert all1 != all2 @@ -367,7 +404,7 @@ def test_page_rank(self): resetProb = 0.15 errorTol = 1.0e-5 pr = g.pageRank(resetProb, tol=errorTol) - self._hasCols(pr, vcols=['id', 'pagerank'], ecols=['src', 'dst', 'weight']) + self._hasCols(pr, vcols=["id", "pagerank"], ecols=["src", "dst", "weight"]) def test_parallel_personalized_page_rank(self): n = 100 @@ -376,31 +413,34 @@ def test_parallel_personalized_page_rank(self): maxIter = 15 sourceIds = [1, 2, 3, 4] pr = g.parallelPersonalizedPageRank(resetProb, sourceIds=sourceIds, maxIter=maxIter) - self._hasCols(pr, vcols=['id', 'pageranks'], ecols=['src', 'dst', 'weight']) + self._hasCols(pr, vcols=["id", "pageranks"], ecols=["src", "dst", "weight"]) def test_shortest_paths(self): edges = [(1, 2), (1, 5), (2, 3), (2, 5), (3, 4), (4, 5), (4, 6)] + # Create bidirectional edges. all_edges = [z for (a, b) in edges for z in [(a, b), (b, a)]] - edges = self.spark.createDataFrame(all_edges, ["src", "dst"]) + edgesDF = self.spark.createDataFrame(all_edges, ["src", "dst"]) vertices = self.spark.createDataFrame([(i,) for i in range(1, 7)], ["id"]) - g = GraphFrame(vertices, edges) + g = GraphFrame(vertices, edgesDF) landmarks = [1, 4] v2 = g.shortestPaths(landmarks) self._df_hasCols(v2, vcols=["id", "distances"]) def test_svd_plus_plus(self): g = self._graph("ALSSyntheticData") - (v2, cost) = g.svdPlusPlus() - self._df_hasCols(v2, vcols=['id', 'column1', 'column2', 'column3', 'column4']) + v2, cost = g.svdPlusPlus() + self._df_hasCols(v2, vcols=["id", "column1", "column2", "column3", "column4"]) def test_strongly_connected_components(self): - # Simple island test + # Simple island test. vertices = self.spark.createDataFrame([(i,) for i in range(1, 6)], ["id"]) edges = self.spark.createDataFrame([(7, 8)], ["src", "dst"]) g = GraphFrame(vertices, edges) c = g.stronglyConnectedComponents(5) for row in c.collect(): - self.assertEqual(row.id, row.component) + assert ( + row.id == row.component + ), f"Vertex {row.id} not equal to its component {row.component}" def test_triangle_counts(self): edges = self.spark.createDataFrame([(0, 1), (1, 2), (2, 0)], ["src", "dst"]) @@ -408,61 +448,66 @@ def test_triangle_counts(self): g = GraphFrame(vertices, edges) c = g.triangleCount() for row in c.select("id", "count").collect(): - self.assertEqual(row.asDict()['count'], 1) - + assert row.asDict()["count"] == 1, f"Triangle count for vertex {row.id} is not 1" + def test_mutithreaded_sparksession_usage(self): - # Test that we can use the GraphFrame API from multiple threads + # Test that the GraphFrame API works correctly from multiple threads. localVertices = [(1, "A"), (2, "B"), (3, "C")] localEdges = [(1, 2, "love"), (2, 1, "hate"), (2, 3, "follow")] v = self.spark.createDataFrame(localVertices, ["id", "name"]) e = self.spark.createDataFrame(localEdges, ["src", "dst", "action"]) - - + exc = None + def run_graphframe() -> None: + nonlocal exc try: GraphFrame(v, e) except Exception as _e: - nonlocal exc exc = _e - + import threading + thread = threading.Thread(target=run_graphframe) thread.start() thread.join() - self.assertIsNone(exc, f"Exception was raised in thread: {exc}") + assert exc is None, f"Exception was raised in thread: {exc}" + +@pytest.mark.usefixtures("set_spark") +class TestGraphFrameExamples: -class GraphFrameExamplesTest(GraphFrameTestCase): - def setUp(self): - super(GraphFrameExamplesTest, self).setUp() + def setup_method(self, method): + # Set up the Java API instance for use in the tests. self.japi = _java_api(self.spark._sc) def test_belief_propagation(self): - # create graphical model g of size 3 x 3 + # Create a graphical model g of size 3x3. g = Graphs(self.spark).gridIsingModel(3) - # run BP for 5 iterations + # Run Belief Propagation (BP) for 5 iterations. numIter = 5 results = BeliefPropagation.runBPwithGraphFrames(g, numIter) - # check beliefs are valid - for row in results.vertices.select('belief').collect(): - belief = row['belief'] - self.assertTrue( - 0 <= belief <= 1, - msg="Expected belief to be probability in [0,1], but found {}".format(belief)) + # Check that each belief is a valid probability in [0, 1]. + for row in results.vertices.select("belief").collect(): + belief = row["belief"] + assert ( + 0 <= belief <= 1 + ), f"Expected belief to be probability in [0,1], but found {belief}" def test_graph_friends(self): - # construct graph + # Construct the graph. g = Graphs(self.spark).friends() - # check that a GraphFrame instance was returned - self.assertIsInstance(g, GraphFrame) + # Check that the result is an instance of GraphFrame. + assert isinstance(g, GraphFrame) def test_graph_grid_ising_model(self): - # construct graph + # Construct a grid Ising model graph. n = 3 g = Graphs(self.spark).gridIsingModel(n) - # check that all the vertices exist - ids = [v['id'] for v in g.vertices.collect()] + # Collect the vertex ids. + ids = [v["id"] for v in g.vertices.collect()] + # Verify that every expected vertex id appears. for i in range(n): for j in range(n): - self.assertIn('{},{}'.format(i, j), ids) + expected_id = f"{i},{j}" + assert expected_id in ids, f"Vertex {expected_id} not found in {ids}" diff --git a/python/requirements-dev.txt b/python/requirements-dev.txt new file mode 100644 index 000000000..b27da4d73 --- /dev/null +++ b/python/requirements-dev.txt @@ -0,0 +1,6 @@ +pytest==8.3.4 +Sphinx==8.1.3 +flake8==7.1.1 +isort==6.0.0 +mypy==1.14.1 +pre-commit==4.0.1 diff --git a/python/requirements.txt b/python/requirements.txt index efb5ec378..fb73319f2 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -1,3 +1,6 @@ # This file should list any python package dependencies. -nose==1.3.7 +pyspark>=2.0.0 +click==8.1.8 numpy>=1.7 +py7zr==0.22.0 +requests==2.32.3 diff --git a/python/run-tests.sh b/python/run-tests.sh index af4e0a139..dc496e8b0 100755 --- a/python/run-tests.sh +++ b/python/run-tests.sh @@ -38,7 +38,7 @@ echo $pyver LIBS="" for lib in "$SPARK_HOME/python/lib"/*zip ; do - LIBS=$LIBS:$lib + LIBS=$LIBS:$lib done # The current directory of the script. @@ -51,7 +51,7 @@ assembly_path="$DIR/../target/scala-$scala_version_major_minor" echo `ls $assembly_path/graphframes-assembly*.jar` JAR_PATH="" for assembly in $assembly_path/graphframes-assembly*.jar ; do - JAR_PATH=$assembly + JAR_PATH=$assembly done export PYSPARK_SUBMIT_ARGS="--driver-memory 2g --executor-memory 2g --jars $JAR_PATH pyspark-shell " @@ -62,17 +62,7 @@ export PYTHONPATH=$PYTHONPATH:graphframes # Run test suites - -if [[ "$python_major" == "2" ]]; then - - # Horrible hack for spark 1.x: we manually remove some log lines to stay below the 4MB log limit on Travis. - $PYSPARK_DRIVER_PYTHON `which nosetests` -v --all-modules -w $DIR 2>&1 | grep -vE "INFO (ParquetOutputFormat|SparkContext|ContextCleaner|ShuffleBlockFetcherIterator|MapOutputTrackerMaster|TaskSetManager|Executor|MemoryStore|CacheManager|BlockManager|DAGScheduler|PythonRDD|TaskSchedulerImpl|ZippedPartitionsRDD2)"; - -else - - $PYSPARK_DRIVER_PYTHON -m "nose" -v --all-modules -w $DIR 2>&1 | grep -vE "INFO (ParquetOutputFormat|SparkContext|ContextCleaner|ShuffleBlockFetcherIterator|MapOutputTrackerMaster|TaskSetManager|Executor|MemoryStore|CacheManager|BlockManager|DAGScheduler|PythonRDD|TaskSchedulerImpl|ZippedPartitionsRDD2)"; - -fi +$PYSPARK_DRIVER_PYTHON -m "pytest" -v $DIR/graphframes/tests.py 2>&1 | grep -vE "INFO (ParquetOutputFormat|SparkContext|ContextCleaner|ShuffleBlockFetcherIterator|MapOutputTrackerMaster|TaskSetManager|Executor|MemoryStore|CacheManager|BlockManager|DAGScheduler|PythonRDD|TaskSchedulerImpl|ZippedPartitionsRDD2)"; # Exit immediately if the tests fail. # Since we pipe to remove the output, we need to use some horrible BASH features: @@ -80,7 +70,6 @@ fi test ${PIPESTATUS[0]} -eq 0 || exit 1; # Run doc tests - cd "$DIR" $PYSPARK_PYTHON -u ./graphframes/graphframe.py "$@" diff --git a/python/setup.cfg b/python/setup.cfg index f127b08af..02a0d5136 100644 --- a/python/setup.cfg +++ b/python/setup.cfg @@ -1,2 +1,42 @@ -# This file contains the default option values to be used during setup. An -# example can be found at https://github.com/pypa/sampleproject/blob/master/setup.cfg +[metadata] +name = graphframes +version = 0.8.5 +description = GraphFrames: Graph Processing Framework for Apache Spark +long_description = file: ../README.md +long_description_content_type = text/markdown +author = GraphFrames Contributors +author_email = graphframes@googlegroups.com +url = https://pypi.org/project/graphframes-py/ +license = Apache License 2.0 +classifiers = + Development Status :: 4 - Beta + Programming Language :: Python :: 3 + Operating System :: OS Independent + +[options] +packages = find: +package_dir = + = python +include_package_data = True +install_requires = + pyspark>=2.0.0 + click==8.1.8 + numpy>=1.7 + py7zr==0.22.0 + requests==2.32.3 + +[options.packages.find] +where = python + exclude = + tests.py + docs + +[options.extras_require] +dev = + pytest==8.3.4 + Sphinx==8.1.3 + black==25.1.0 + flake8==7.1.1 + isort==6.0.0 + mypy==1.14.1 + pre-commit==3.5.1 diff --git a/python/setup.py b/python/setup.py index 9dad5462e..a91fb629a 100644 --- a/python/setup.py +++ b/python/setup.py @@ -1,2 +1,35 @@ -# Your python setup file. An example can be found at: -# https://github.com/pypa/sampleproject/blob/master/setup.py +from setuptools import setup, find_packages # type: ignore +import os + + +def parse_requirements(filename): + """Load requirements from a pip requirements file.""" + with open(filename, encoding="utf-8") as f: + # Filter out comments and empty lines. + return [line.strip() for line in f if line.strip() and not line.startswith("#")] + + +# Read the long description from the README file. +here = os.path.abspath(os.path.dirname(__file__)) + +# Use requirements.txt to get the list of dependencies. +requirements = parse_requirements(os.path.join(here, "requirements.txt")) + +setup( + name="graphframes", + version=open("version.sbt").read().strip(), # Update this version as needed + description="GraphFrames: Graph Processing Framework for Apache Spark", + long_description=open(os.path.join(f"{here}/..", "README.md"), encoding="utf-8").read(), + long_description_content_type="text/markdown", + author="GraphFrames Contributors", + author_email="graphframes@googlegroups.com", + url="https://pypi.org/project/graphframes-py", + packages=find_packages(where="python"), + package_dir={"": "python"}, + include_package_data=True, # Include non-code files specified in MANIFEST.in + install_requires=requirements, + classifiers=[ + "Programming Language :: Python :: 3", + "Operating System :: OS Independent", + ], +) diff --git a/version.sbt b/version.sbt index f72bdcc0e..6fbb590a4 100644 --- a/version.sbt +++ b/version.sbt @@ -1 +1 @@ -ThisBuild / version := "0.8.4" +ThisBuild / version := "0.8.5" From c25624474e261d73c1eeb12d35b2604ef6e977cf Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sat, 15 Feb 2025 21:07:24 -0800 Subject: [PATCH 06/69] Restore Python .gitignore --- python/.gitignore | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 python/.gitignore diff --git a/python/.gitignore b/python/.gitignore new file mode 100644 index 000000000..2130ff922 --- /dev/null +++ b/python/.gitignore @@ -0,0 +1,5 @@ +*.pyc +docs/_build/ +build/ +dist/ + From 6c3df0b1cdf606ddf8e1aed00edd1d93ffb11220 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sat, 15 Feb 2025 21:08:05 -0800 Subject: [PATCH 07/69] Extra newline removed --- python/.gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/python/.gitignore b/python/.gitignore index 2130ff922..81410ca55 100644 --- a/python/.gitignore +++ b/python/.gitignore @@ -2,4 +2,3 @@ docs/_build/ build/ dist/ - From a583d5727cd783a01762310c86d90dfdb1efbc17 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sat, 15 Feb 2025 21:48:47 -0800 Subject: [PATCH 08/69] Fixed mistaken reference to stackexchange.py where motif.py is required --- docs/motif-tutorial.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/motif-tutorial.md b/docs/motif-tutorial.md index 2f95952ee..44a2712ce 100644 --- a/docs/motif-tutorial.md +++ b/docs/motif-tutorial.md @@ -81,7 +81,7 @@ For a quick run-through of the script, use the following command:
{% highlight bash %} -spark-submit --packages com.databricks:spark-xml_2.12:0.18.0 python/graphframes/tutorials/stackexchange.py +spark-submit --packages com.databricks:spark-xml_2.12:0.18.0 python/graphframes/tutorials/motif.py {% endhighlight %}
From 73f6cc234d2907ac21742677371f4224f21e9a63 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sat, 15 Feb 2025 21:51:40 -0800 Subject: [PATCH 09/69] Had XML package when I needed GraphFrames --- docs/motif-tutorial.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/motif-tutorial.md b/docs/motif-tutorial.md index 44a2712ce..93f8565ed 100644 --- a/docs/motif-tutorial.md +++ b/docs/motif-tutorial.md @@ -81,7 +81,7 @@ For a quick run-through of the script, use the following command:
{% highlight bash %} -spark-submit --packages com.databricks:spark-xml_2.12:0.18.0 python/graphframes/tutorials/motif.py +spark-submit --packages graphframes:graphframes:0.8.3-spark3.5-s_2.12 python/graphframes/tutorials/motif.py {% endhighlight %}
From caf50911ed5da315ca66134798a28ea240b71a81 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 11:58:23 -0800 Subject: [PATCH 10/69] Added VERSION file set to 0.8.5 --- VERSION | 1 + 1 file changed, 1 insertion(+) create mode 100644 VERSION diff --git a/VERSION b/VERSION new file mode 100644 index 000000000..7ada0d303 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.8.5 From 7cfa2d18152e566f39dc57ea5c8e1c6075648542 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 12:40:44 -0800 Subject: [PATCH 11/69] isort; fiex edgesDF variable name. --- python/graphframes/tests.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/python/graphframes/tests.py b/python/graphframes/tests.py index 259435759..d4269f449 100644 --- a/python/graphframes/tests.py +++ b/python/graphframes/tests.py @@ -16,18 +16,18 @@ # import os -import tempfile -import shutil import re +import shutil +import tempfile import pytest from pyspark import SparkConf, SparkContext -from pyspark.sql import functions as F, SparkSession +from pyspark.sql import SparkSession +from pyspark.sql import functions as F -from .graphframe import GraphFrame, Pregel, _java_api, _from_java_gf +from .examples import BeliefPropagation, Graphs +from .graphframe import GraphFrame, Pregel, _from_java_gf, _java_api from .lib import AggregateMessages as AM -from .examples import Graphs, BeliefPropagation - VERSION = open("version.sbt").read().strip() @@ -419,9 +419,9 @@ def test_shortest_paths(self): edges = [(1, 2), (1, 5), (2, 3), (2, 5), (3, 4), (4, 5), (4, 6)] # Create bidirectional edges. all_edges = [z for (a, b) in edges for z in [(a, b), (b, a)]] - edgesDF = self.spark.createDataFrame(all_edges, ["src", "dst"]) + edges = self.spark.createDataFrame(all_edges, ["src", "dst"]) vertices = self.spark.createDataFrame([(i,) for i in range(1, 7)], ["id"]) - g = GraphFrame(vertices, edgesDF) + g = GraphFrame(vertices, edges) landmarks = [1, 4] v2 = g.shortestPaths(landmarks) self._df_hasCols(v2, vcols=["id", "distances"]) From a8bf0be4523bc41dd01966f7b525a9ec7c918ede Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 13:08:48 -0800 Subject: [PATCH 12/69] Back out Dockerfile changes --- Dockerfile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index b9fe8c528..1c4430912 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,16 +1,16 @@ FROM ubuntu:22.04 -ARG PYTHON_VERSION=3.9 +ARG PYTHON_VERSION=3.8 ARG DEBIAN_FRONTEND=noninteractive RUN apt-get update && \ - apt-get install -y wget bzip2 build-essential openjdk-11-jdk ssh sudo && \ + apt-get install -y wget bzip2 build-essential openjdk-8-jdk ssh sudo && \ apt-get clean # Install Spark and update env variables. -ENV SCALA_VERSION 2.12.20 -ENV SPARK_VERSION "3.5.4" -ENV SPARK_BUILD "spark-${SPARK_VERSION}-bin-hadoop3" +ENV SCALA_VERSION 2.12.17 +ENV SPARK_VERSION "3.4.1" +ENV SPARK_BUILD "spark-${SPARK_VERSION}-bin-hadoop3.2" ENV SPARK_BUILD_URL "https://dist.apache.org/repos/dist/release/spark/spark-${SPARK_VERSION}/${SPARK_BUILD}.tgz" RUN wget --quiet "$SPARK_BUILD_URL" -O /tmp/spark.tgz && \ tar -C /opt -xf /tmp/spark.tgz && \ From 54a942da4a572471eead3e5df4f721096d638ca6 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 13:21:47 -0800 Subject: [PATCH 13/69] Back out version change in build.sbt --- build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index c6b503989..4ee4d9bd5 100644 --- a/build.sbt +++ b/build.sbt @@ -3,7 +3,7 @@ import ReleaseTransformations.* lazy val sparkVer = sys.props.getOrElse("spark.version", "3.5.4") lazy val sparkBranch = sparkVer.substring(0, 3) lazy val defaultScalaVer = sparkBranch match { - case "3.5" => "2.12.20" + case "3.5" => "2.12.18" case _ => throw new IllegalArgumentException(s"Unsupported Spark version: $sparkVer.") } lazy val scalaVer = sys.props.getOrElse("scala.version", defaultScalaVer) From 8b0e34697928ad0cb1b07cba96c0d0657a0d771b Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 13:23:35 -0800 Subject: [PATCH 14/69] Backout changes to config and run-tests --- docs/_config.yml | 2 +- python/run-tests.sh | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/docs/_config.yml b/docs/_config.yml index 379fc242f..4c1ab075c 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -13,7 +13,7 @@ include: # These allow the documentation to be updated with newer releases # of Spark, Scala, and Mesos. -GRAPHFRAMES_VERSION: 0.8.5 +GRAPHFRAMES_VERSION: 0.8.4 #SCALA_BINARY_VERSION: "2.10" #SCALA_VERSION: "2.10.4" #MESOS_VERSION: 0.21.0 diff --git a/python/run-tests.sh b/python/run-tests.sh index dc496e8b0..af4e0a139 100755 --- a/python/run-tests.sh +++ b/python/run-tests.sh @@ -38,7 +38,7 @@ echo $pyver LIBS="" for lib in "$SPARK_HOME/python/lib"/*zip ; do - LIBS=$LIBS:$lib + LIBS=$LIBS:$lib done # The current directory of the script. @@ -51,7 +51,7 @@ assembly_path="$DIR/../target/scala-$scala_version_major_minor" echo `ls $assembly_path/graphframes-assembly*.jar` JAR_PATH="" for assembly in $assembly_path/graphframes-assembly*.jar ; do - JAR_PATH=$assembly + JAR_PATH=$assembly done export PYSPARK_SUBMIT_ARGS="--driver-memory 2g --executor-memory 2g --jars $JAR_PATH pyspark-shell " @@ -62,7 +62,17 @@ export PYTHONPATH=$PYTHONPATH:graphframes # Run test suites -$PYSPARK_DRIVER_PYTHON -m "pytest" -v $DIR/graphframes/tests.py 2>&1 | grep -vE "INFO (ParquetOutputFormat|SparkContext|ContextCleaner|ShuffleBlockFetcherIterator|MapOutputTrackerMaster|TaskSetManager|Executor|MemoryStore|CacheManager|BlockManager|DAGScheduler|PythonRDD|TaskSchedulerImpl|ZippedPartitionsRDD2)"; + +if [[ "$python_major" == "2" ]]; then + + # Horrible hack for spark 1.x: we manually remove some log lines to stay below the 4MB log limit on Travis. + $PYSPARK_DRIVER_PYTHON `which nosetests` -v --all-modules -w $DIR 2>&1 | grep -vE "INFO (ParquetOutputFormat|SparkContext|ContextCleaner|ShuffleBlockFetcherIterator|MapOutputTrackerMaster|TaskSetManager|Executor|MemoryStore|CacheManager|BlockManager|DAGScheduler|PythonRDD|TaskSchedulerImpl|ZippedPartitionsRDD2)"; + +else + + $PYSPARK_DRIVER_PYTHON -m "nose" -v --all-modules -w $DIR 2>&1 | grep -vE "INFO (ParquetOutputFormat|SparkContext|ContextCleaner|ShuffleBlockFetcherIterator|MapOutputTrackerMaster|TaskSetManager|Executor|MemoryStore|CacheManager|BlockManager|DAGScheduler|PythonRDD|TaskSchedulerImpl|ZippedPartitionsRDD2)"; + +fi # Exit immediately if the tests fail. # Since we pipe to remove the output, we need to use some horrible BASH features: @@ -70,6 +80,7 @@ $PYSPARK_DRIVER_PYTHON -m "pytest" -v $DIR/graphframes/tests.py 2>&1 | grep -vE test ${PIPESTATUS[0]} -eq 0 || exit 1; # Run doc tests + cd "$DIR" $PYSPARK_PYTHON -u ./graphframes/graphframe.py "$@" From 46c2b9300ace8c95ba482e6582631b79a348705c Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 13:24:19 -0800 Subject: [PATCH 15/69] Back out pytest conversion --- python/graphframes/tests.py | 409 ++++++++++++++++-------------------- 1 file changed, 182 insertions(+), 227 deletions(-) diff --git a/python/graphframes/tests.py b/python/graphframes/tests.py index d4269f449..9a7ad1371 100644 --- a/python/graphframes/tests.py +++ b/python/graphframes/tests.py @@ -15,72 +15,63 @@ # limitations under the License. # -import os -import re -import shutil +import sys import tempfile +import shutil +import re -import pytest -from pyspark import SparkConf, SparkContext -from pyspark.sql import SparkSession -from pyspark.sql import functions as F - -from .examples import BeliefPropagation, Graphs -from .graphframe import GraphFrame, Pregel, _from_java_gf, _java_api -from .lib import AggregateMessages as AM - -VERSION = open("version.sbt").read().strip() - +if sys.version_info[:2] <= (2, 6): + try: + import unittest2 as unittest + except ImportError: + sys.stderr.write('Please install unittest2 to test with Python 2.6 or earlier') + sys.exit(1) +else: + import unittest -@pytest.fixture(scope="class", autouse=True) -def set_spark(request, spark_session): - request.cls.spark = spark_session +from pyspark import SparkContext +from pyspark.sql import functions as sqlfunctions, SparkSession +from .graphframe import GraphFrame, Pregel, _java_api, _from_java_gf +from .lib import AggregateMessages as AM +from .examples import Graphs, BeliefPropagation -@pytest.mark.usefixtures("set_spark") class GraphFrameTestUtils(object): @classmethod def parse_spark_version(cls, version_str): - """take an input version string - return version items in a dictionary + """ take an input version string + return version items in a dictionary """ - _sc_ver_patt = r"(\d+)\.(\d+)(\.(\d+)(-(.+))?)?" + _sc_ver_patt = r'(\d+)\.(\d+)(\.(\d+)(-(.+))?)?' m = re.match(_sc_ver_patt, version_str) if not m: - raise TypeError( - "version {} shoud be in ..".format(version_str) - ) + raise TypeError("version {} shoud be in ..".format(version_str)) version_info = {} try: - version_info["major"] = int(m.group(1)) + version_info['major'] = int(m.group(1)) except: raise TypeError("invalid minor version") try: - version_info["minor"] = int(m.group(2)) + version_info['minor'] = int(m.group(2)) except: raise TypeError("invalid major version") try: - version_info["maintenance"] = int(m.group(4)) + version_info['maintenance'] = int(m.group(4)) except: - version_info["maintenance"] = 0 + version_info['maintenance'] = 0 try: - version_info["special"] = m.group(6) + version_info['special'] = m.group(6) except: pass return version_info @classmethod def createSparkContext(cls): - cls.conf = SparkConf().setAppName("GraphFramesTests") - cls.conf.set( - "spark.submit.pyFiles", - os.path.abspath("python/dist/graphframes-{VERSION}-py3-none-any.whl"), - ) - cls.sc = SparkContext(master="local[4]", appName="GraphFramesTests", conf=cls.conf) + cls.sc = sc = SparkContext('local[4]', "GraphFramesTests") cls.checkpointDir = tempfile.mkdtemp() cls.sc.setCheckpointDir(cls.checkpointDir) - cls.spark_version = cls.parse_spark_version(cls.sc.version) + cls.spark_version = cls.parse_spark_version(sc.version) @classmethod def stopSparkContext(cls): @@ -90,10 +81,10 @@ def stopSparkContext(cls): @classmethod def spark_at_least_of_version(cls, version_str): - assert hasattr(cls, "spark_version") + assert hasattr(cls, 'spark_version') required_version = cls.parse_spark_version(version_str) spark_version = cls.spark_version - for _name in ["major", "minor", "maintenance"]: + for _name in ['major', 'minor', 'maintenance']: sc_ver = spark_version[_name] req_ver = required_version[_name] if sc_ver != req_ver: @@ -101,31 +92,28 @@ def spark_at_least_of_version(cls, version_str): # All major.minor.maintenance equal return True - -@pytest.fixture(scope="module", autouse=True) -def spark_context(): +def setUpModule(): GraphFrameTestUtils.createSparkContext() - yield + +def tearDownModule(): GraphFrameTestUtils.stopSparkContext() -@pytest.fixture(scope="class") -def spark_session(): - # Create a SparkSession with a smaller number of shuffle partitions. - spark = ( - SparkSession(GraphFrameTestUtils.sc) - .builder.config("spark.sql.shuffle.partitions", 4) - .getOrCreate() - ) - yield spark - # No explicit stop; SparkContext shutdown will clean up. +class GraphFrameTestCase(unittest.TestCase): + + @classmethod + def setUpClass(cls): + # Small tests run much faster with spark.sql.shuffle.partitions = 4 + cls.spark = SparkSession(GraphFrameTestUtils.sc).builder.config('spark.sql.shuffle.partitions', 4).getOrCreate() + @classmethod + def tearDownClass(cls): + cls.spark = None -@pytest.mark.usefixtures("set_spark") -class GraphFrameTest: - def setup_method(self, method): - # Mimic setUp: create a simple GraphFrame instance for each test. +class GraphFrameTest(GraphFrameTestCase): + def setUp(self): + super(GraphFrameTest, self).setUp() localVertices = [(1, "A"), (2, "B"), (3, "C")] localEdges = [(1, 2, "love"), (2, 1, "hate"), (2, 3, "follow")] v = self.spark.createDataFrame(localVertices, ["id", "name"]) @@ -135,38 +123,28 @@ def setup_method(self, method): def test_spark_version_check(self): gtu = GraphFrameTestUtils gtu.spark_version = gtu.parse_spark_version("2.0.2") - - assert gtu.spark_at_least_of_version("1.7") - assert gtu.spark_at_least_of_version("2.0") - assert gtu.spark_at_least_of_version("2.0.1") - assert gtu.spark_at_least_of_version("2.0.2") - assert not gtu.spark_at_least_of_version("2.0.3") - assert not gtu.spark_at_least_of_version("2.1") + self.assertTrue(gtu.spark_at_least_of_version("1.7")) + self.assertTrue(gtu.spark_at_least_of_version("2.0")) + self.assertTrue(gtu.spark_at_least_of_version("2.0.1")) + self.assertTrue(gtu.spark_at_least_of_version("2.0.2")) + self.assertFalse(gtu.spark_at_least_of_version("2.0.3")) + self.assertFalse(gtu.spark_at_least_of_version("2.1")) def test_construction(self): g = self.g - vertexIDs = [row[0] for row in g.vertices.select("id").collect()] + vertexIDs = map(lambda x: x[0], g.vertices.select("id").collect()) assert sorted(vertexIDs) == [1, 2, 3] - - edgeActions = [row[0] for row in g.edges.select("action").collect()] + edgeActions = map(lambda x: x[0], g.edges.select("action").collect()) assert sorted(edgeActions) == ["follow", "hate", "love"] - - tripletsFirst = list( - map( - lambda x: (x[0][1], x[1][1], x[2][2]), - g.triplets.sort("src.id").select("src", "dst", "edge").take(1), - ) - ) + tripletsFirst = list(map(lambda x: (x[0][1], x[1][1], x[2][2]), + g.triplets.sort("src.id").select("src", "dst", "edge").take(1))) assert tripletsFirst == [("A", "B", "love")], tripletsFirst - # Try with invalid vertices and edges DataFrames v_invalid = self.spark.createDataFrame( - [(1, "A"), (2, "B"), (3, "C")], ["invalid_colname_1", "invalid_colname_2"] - ) + [(1, "A"), (2, "B"), (3, "C")], ["invalid_colname_1", "invalid_colname_2"]) e_invalid = self.spark.createDataFrame( - [(1, 2), (2, 3), (3, 1)], ["invalid_colname_3", "invalid_colname_4"] - ) - with pytest.raises(ValueError): + [(1, 2), (2, 3), (3, 1)], ["invalid_colname_3", "invalid_colname_4"]) + with self.assertRaises(ValueError): GraphFrame(v_invalid, e_invalid) def test_cache(self): @@ -177,17 +155,17 @@ def test_cache(self): def test_degrees(self): g = self.g outDeg = g.outDegrees - assert set(outDeg.columns) == {"id", "outDegree"} + self.assertSetEqual(set(outDeg.columns), {"id", "outDegree"}) inDeg = g.inDegrees - assert set(inDeg.columns) == {"id", "inDegree"} + self.assertSetEqual(set(inDeg.columns), {"id", "inDegree"}) deg = g.degrees - assert set(deg.columns) == {"id", "degree"} + self.assertSetEqual(set(deg.columns), {"id", "degree"}) def test_motif_finding(self): g = self.g motifs = g.find("(a)-[e]->(b)") assert motifs.count() == 3 - assert set(motifs.columns) == {"a", "e", "b"} + self.assertSetEqual(set(motifs.columns), {"a", "e", "b"}) def test_filterVertices(self): g = self.g @@ -200,8 +178,8 @@ def test_filterVertices(self): e2 = g2.edges.select("src", "dst", "action").collect() assert len(v2) == len(expected_v) assert len(e2) == len(expected_e) - assert set(v2) == set(expected_v) - assert set(e2) == set(expected_e) + self.assertSetEqual(set(v2), set(expected_v)) + self.assertSetEqual(set(e2), set(expected_e)) def test_filterEdges(self): g = self.g @@ -214,8 +192,8 @@ def test_filterEdges(self): e2 = g2.edges.select("src", "dst", "action").collect() assert len(v2) == len(expected_v) assert len(e2) == len(expected_e) - assert set(v2) == set(expected_v) - assert set(e2) == set(expected_e) + self.assertSetEqual(set(v2), set(expected_v)) + self.assertSetEqual(set(e2), set(expected_e)) def test_dropIsolatedVertices(self): g = self.g @@ -226,93 +204,74 @@ def test_dropIsolatedVertices(self): expected_e = [(2, 3, "follow")] assert len(v2) == len(expected_v) assert len(e2) == len(expected_e) - assert set(v2) == set(expected_v) - assert set(e2) == set(expected_e) + self.assertSetEqual(set(v2), set(expected_v)) + self.assertSetEqual(set(e2), set(expected_e)) def test_bfs(self): g = self.g paths = g.bfs("name='A'", "name='C'") - assert paths.count() == 1 - # Expecting that the first intermediary vertex in the BFS is "B" - assert paths.select("v1.name").head()[0] == "B" - + self.assertEqual(paths.count(), 1) + self.assertEqual(paths.select("v1.name").head()[0], "B") paths2 = g.bfs("name='A'", "name='C'", edgeFilter="action!='follow'") - assert paths2.count() == 0 - + self.assertEqual(paths2.count(), 0) paths3 = g.bfs("name='A'", "name='C'", maxPathLength=1) - assert paths3.count() == 0 + self.assertEqual(paths3.count(), 0) -@pytest.mark.usefixtures("set_spark") -class TestPregel: +class PregelTest(GraphFrameTestCase): + def setUp(self): + super(PregelTest, self).setUp() def test_page_rank(self): - # Create an edge DataFrame; note that vertex 3 has no in-links. - edges = self.spark.createDataFrame( - [[0, 1], [1, 2], [2, 4], [2, 0], [3, 4], [4, 0], [4, 2]], - ["src", "dst"], - ) + from pyspark.sql.functions import coalesce, col, lit, sum, when + edges = self.spark.createDataFrame([[0, 1], + [1, 2], + [2, 4], + [2, 0], + [3, 4], # 3 has no in-links + [4, 0], + [4, 2]], ["src", "dst"]) edges.cache() - - # Create a vertex DataFrame and count vertices. vertices = self.spark.createDataFrame([[0], [1], [2], [3], [4]], ["id"]) numVertices = vertices.count() - - # Get the outDegrees DataFrame from a GraphFrame built on the original vertices and edges. vertices = GraphFrame(vertices, edges).outDegrees vertices.cache() - - # Construct a new GraphFrame with the updated vertices DataFrame. graph = GraphFrame(vertices, edges) alpha = 0.15 - - # Run PageRank via Pregel. - ranks = ( - graph.pregel.setMaxIter(5) - .withVertexColumn( - "rank", - F.lit(1.0 / numVertices), - F.coalesce(Pregel.msg(), F.lit(0.0)) * F.lit(1.0 - alpha) - + F.lit(alpha / numVertices), - ) - .sendMsgToDst(Pregel.src("rank") / Pregel.src("outDegree")) - .aggMsgs(F.sum(Pregel.msg())) + ranks = graph.pregel \ + .setMaxIter(5) \ + .withVertexColumn("rank", lit(1.0 / numVertices), + coalesce(Pregel.msg(), + lit(0.0)) * lit(1.0 - alpha) + lit(alpha / numVertices)) \ + .sendMsgToDst(Pregel.src("rank") / Pregel.src("outDegree")) \ + .aggMsgs(sum(Pregel.msg())) \ .run() - ) - - # Collect and sort results. resultRows = ranks.sort(ranks.id).collect() - result = list(map(lambda x: x.rank, resultRows)) + result = map(lambda x: x.rank, resultRows) expected = [0.245, 0.224, 0.303, 0.03, 0.197] - - # Compare each result with its expected value using a tolerance of 1e-3. for a, b in zip(result, expected): - assert a == pytest.approx(b, abs=1e-3) - + self.assertAlmostEqual(a, b, delta = 1e-3) -@pytest.mark.usefixtures("set_spark") -class TestGraphFrameLib: - def setup_method(self, method): - # Set up the Java API instance for each test. +class GraphFrameLibTest(GraphFrameTestCase): + def setUp(self): + super(GraphFrameLibTest, self).setUp() self.japi = _java_api(self.spark._sc) - def _hasCols(self, graph, vcols=[], ecols=[]): - for c in vcols: - assert c in graph.vertices.columns, f"Vertex DataFrame missing column: {c}" - for c in ecols: - assert c in graph.edges.columns, f"Edge DataFrame missing column: {c}" + def _hasCols(self, graph, vcols = [], ecols = []): + map(lambda c: self.assertIn(c, graph.vertices.columns), vcols) + map(lambda c: self.assertIn(c, graph.edges.columns), ecols) - def _df_hasCols(self, df, vcols=[]): - for c in vcols: - assert c in df.columns, f"DataFrame missing column: {c}" + def _df_hasCols(self, vertices, vcols = []): + map(lambda c: self.assertIn(c, vertices.columns), vcols) def _graph(self, name, *args): """ - Convenience to call one of the example graphs, passing the arguments and wrapping the result as a Python object. - :param name: the name of the example graph. - :param args: all the required arguments (excluding the initial SparkSession). - :return: a GraphFrame object. + Convenience to call one of the example graphs, passing the arguments and wrapping the result back + as a python object. + :param name: the name of the example graph + :param args: all the required arguments, without the initial spark session + :return: """ examples = self.japi.examples() jgraph = getattr(examples, name)(*args) @@ -322,79 +281,83 @@ def test_aggregate_messages(self): g = self._graph("friends") # For each user, sum the ages of the adjacent users, # plus 1 for the src's sum if the edge is "friend". - sendToSrc = AM.dst["age"] + F.when(AM.edge["relationship"] == "friend", F.lit(1)).otherwise( - 0 - ) - sendToDst = AM.src["age"] + sendToSrc = ( + AM.dst['age'] + + sqlfunctions.when( + AM.edge['relationship'] == 'friend', + sqlfunctions.lit(1) + ).otherwise(0)) + sendToDst = AM.src['age'] agg = g.aggregateMessages( - F.sum(AM.msg).alias("summedAges"), sendToSrc=sendToSrc, sendToDst=sendToDst - ) - # Run the aggregation again using SQL expressions as Strings. + sqlfunctions.sum(AM.msg).alias('summedAges'), + sendToSrc=sendToSrc, + sendToDst=sendToDst) + # Run the aggregation again providing SQL expressions as String instead. agg2 = g.aggregateMessages( "sum(MSG) AS `summedAges`", sendToSrc="(dst['age'] + CASE WHEN (edge['relationship'] = 'friend') THEN 1 ELSE 0 END)", - sendToDst="src['age']", - ) - # Build mappings from id to the aggregated message. - aggMap = {row.id: row.summedAges for row in agg.select("id", "summedAges").collect()} - agg2Map = {row.id: row.summedAges for row in agg2.select("id", "summedAges").collect()} - # Compute the expected aggregation via brute force. - user2age = {row.id: row.age for row in g.vertices.select("id", "age").collect()} + sendToDst="src['age']") + # Convert agg and agg2 to a mapping from id to the aggregated message. + aggMap = {id_: s for id_, s in agg.select('id', 'summedAges').collect()} + agg2Map = {id_: s for id_, s in agg2.select('id', 'summedAges').collect()} + # Compute the truth via brute force. + user2age = {id_: age for id_, age in g.vertices.select('id', 'age').collect()} trueAgg = {} - for row in g.edges.select("src", "dst", "relationship").collect(): - src, dst, rel = row.src, row.dst, row.relationship - trueAgg[src] = trueAgg.get(src, 0) + user2age[dst] + (1 if rel == "friend" else 0) + for src, dst, rel in g.edges.select("src", "dst", "relationship").collect(): + trueAgg[src] = trueAgg.get(src, 0) + user2age[dst] + (1 if rel == 'friend' else 0) trueAgg[dst] = trueAgg.get(dst, 0) + user2age[src] - # Verify both aggregations match the expected results. - assert aggMap == trueAgg, f"aggMap {aggMap} does not equal expected {trueAgg}" - assert agg2Map == trueAgg, f"agg2Map {agg2Map} does not equal expected {trueAgg}" - # Check that passing a wrong type for messages raises a TypeError. - with pytest.raises(TypeError): + # Compare if the agg mappings match the brute force mapping + self.assertEqual(aggMap, trueAgg) + self.assertEqual(agg2Map, trueAgg) + # Check that TypeError is raises with messages of wrong type + with self.assertRaises(TypeError): g.aggregateMessages( - "sum(MSG) AS `summedAges`", sendToSrc=object(), sendToDst="src['age']" - ) - with pytest.raises(TypeError): + "sum(MSG) AS `summedAges`", + sendToSrc=object(), + sendToDst="src['age']") + with self.assertRaises(TypeError): g.aggregateMessages( - "sum(MSG) AS `summedAges`", sendToSrc=F.col("dst")["age"], sendToDst=object() - ) + "sum(MSG) AS `summedAges`", + sendToSrc=dst['age'], + sendToDst=object()) def test_connected_components(self): - v = self.spark.createDataFrame([(0, "a", "b")], ["id", "vattr", "gender"]) + v = self.spark.createDataFrame([ + (0, "a", "b")], ["id", "vattr", "gender"]) e = self.spark.createDataFrame([(0, 0, 1)], ["src", "dst", "test"]).filter("src > 10") g = GraphFrame(v, e) comps = g.connectedComponents() - self._df_hasCols(comps, vcols=["id", "component", "vattr", "gender"]) - assert comps.count() == 1 + self._df_hasCols(comps, vcols=['id', 'component', 'vattr', 'gender']) + self.assertEqual(comps.count(), 1) def test_connected_components2(self): v = self.spark.createDataFrame([(0, "a0", "b0"), (1, "a1", "b1")], ["id", "A", "B"]) e = self.spark.createDataFrame([(0, 1, "a01", "b01")], ["src", "dst", "A", "B"]) g = GraphFrame(v, e) comps = g.connectedComponents() - self._df_hasCols(comps, vcols=["id", "component", "A", "B"]) - assert comps.count() == 2 + self._df_hasCols(comps, vcols=['id', 'component', 'A', 'B']) + self.assertEqual(comps.count(), 2) def test_connected_components_friends(self): g = self._graph("friends") - comps_tests = [ - g.connectedComponents(), - g.connectedComponents(broadcastThreshold=1), - g.connectedComponents(checkpointInterval=0), - g.connectedComponents(checkpointInterval=10), - g.connectedComponents(algorithm="graphx"), - ] + comps_tests = [] + comps_tests += [g.connectedComponents()] + comps_tests += [g.connectedComponents(broadcastThreshold=1)] + comps_tests += [g.connectedComponents(checkpointInterval=0)] + comps_tests += [g.connectedComponents(checkpointInterval=10)] + comps_tests += [g.connectedComponents(algorithm="graphx")] for c in comps_tests: - assert c.groupBy("component").count().count() == 2 + self.assertEqual(c.groupBy("component").count().count(), 2) def test_label_progagation(self): n = 5 g = self._graph("twoBlobs", n) labels = g.labelPropagation(maxIter=4 * n) labels1 = labels.filter("id < 5").select("label").collect() - all1 = {row.label for row in labels1} + all1 = set([x.label for x in labels1]) assert len(all1) == 1 labels2 = labels.filter("id >= 5").select("label").collect() - all2 = {row.label for row in labels2} + all2 = set([x.label for x in labels2]) assert len(all2) == 1 assert all1 != all2 @@ -404,7 +367,7 @@ def test_page_rank(self): resetProb = 0.15 errorTol = 1.0e-5 pr = g.pageRank(resetProb, tol=errorTol) - self._hasCols(pr, vcols=["id", "pagerank"], ecols=["src", "dst", "weight"]) + self._hasCols(pr, vcols=['id', 'pagerank'], ecols=['src', 'dst', 'weight']) def test_parallel_personalized_page_rank(self): n = 100 @@ -413,11 +376,10 @@ def test_parallel_personalized_page_rank(self): maxIter = 15 sourceIds = [1, 2, 3, 4] pr = g.parallelPersonalizedPageRank(resetProb, sourceIds=sourceIds, maxIter=maxIter) - self._hasCols(pr, vcols=["id", "pageranks"], ecols=["src", "dst", "weight"]) + self._hasCols(pr, vcols=['id', 'pageranks'], ecols=['src', 'dst', 'weight']) def test_shortest_paths(self): edges = [(1, 2), (1, 5), (2, 3), (2, 5), (3, 4), (4, 5), (4, 6)] - # Create bidirectional edges. all_edges = [z for (a, b) in edges for z in [(a, b), (b, a)]] edges = self.spark.createDataFrame(all_edges, ["src", "dst"]) vertices = self.spark.createDataFrame([(i,) for i in range(1, 7)], ["id"]) @@ -428,19 +390,17 @@ def test_shortest_paths(self): def test_svd_plus_plus(self): g = self._graph("ALSSyntheticData") - v2, cost = g.svdPlusPlus() - self._df_hasCols(v2, vcols=["id", "column1", "column2", "column3", "column4"]) + (v2, cost) = g.svdPlusPlus() + self._df_hasCols(v2, vcols=['id', 'column1', 'column2', 'column3', 'column4']) def test_strongly_connected_components(self): - # Simple island test. + # Simple island test vertices = self.spark.createDataFrame([(i,) for i in range(1, 6)], ["id"]) edges = self.spark.createDataFrame([(7, 8)], ["src", "dst"]) g = GraphFrame(vertices, edges) c = g.stronglyConnectedComponents(5) for row in c.collect(): - assert ( - row.id == row.component - ), f"Vertex {row.id} not equal to its component {row.component}" + self.assertEqual(row.id, row.component) def test_triangle_counts(self): edges = self.spark.createDataFrame([(0, 1), (1, 2), (2, 0)], ["src", "dst"]) @@ -448,66 +408,61 @@ def test_triangle_counts(self): g = GraphFrame(vertices, edges) c = g.triangleCount() for row in c.select("id", "count").collect(): - assert row.asDict()["count"] == 1, f"Triangle count for vertex {row.id} is not 1" - + self.assertEqual(row.asDict()['count'], 1) + def test_mutithreaded_sparksession_usage(self): - # Test that the GraphFrame API works correctly from multiple threads. + # Test that we can use the GraphFrame API from multiple threads localVertices = [(1, "A"), (2, "B"), (3, "C")] localEdges = [(1, 2, "love"), (2, 1, "hate"), (2, 3, "follow")] v = self.spark.createDataFrame(localVertices, ["id", "name"]) e = self.spark.createDataFrame(localEdges, ["src", "dst", "action"]) - + + exc = None - def run_graphframe() -> None: - nonlocal exc try: GraphFrame(v, e) except Exception as _e: + nonlocal exc exc = _e - + import threading - thread = threading.Thread(target=run_graphframe) thread.start() thread.join() - assert exc is None, f"Exception was raised in thread: {exc}" - + self.assertIsNone(exc, f"Exception was raised in thread: {exc}") -@pytest.mark.usefixtures("set_spark") -class TestGraphFrameExamples: - def setup_method(self, method): - # Set up the Java API instance for use in the tests. +class GraphFrameExamplesTest(GraphFrameTestCase): + def setUp(self): + super(GraphFrameExamplesTest, self).setUp() self.japi = _java_api(self.spark._sc) def test_belief_propagation(self): - # Create a graphical model g of size 3x3. + # create graphical model g of size 3 x 3 g = Graphs(self.spark).gridIsingModel(3) - # Run Belief Propagation (BP) for 5 iterations. + # run BP for 5 iterations numIter = 5 results = BeliefPropagation.runBPwithGraphFrames(g, numIter) - # Check that each belief is a valid probability in [0, 1]. - for row in results.vertices.select("belief").collect(): - belief = row["belief"] - assert ( - 0 <= belief <= 1 - ), f"Expected belief to be probability in [0,1], but found {belief}" + # check beliefs are valid + for row in results.vertices.select('belief').collect(): + belief = row['belief'] + self.assertTrue( + 0 <= belief <= 1, + msg="Expected belief to be probability in [0,1], but found {}".format(belief)) def test_graph_friends(self): - # Construct the graph. + # construct graph g = Graphs(self.spark).friends() - # Check that the result is an instance of GraphFrame. - assert isinstance(g, GraphFrame) + # check that a GraphFrame instance was returned + self.assertIsInstance(g, GraphFrame) def test_graph_grid_ising_model(self): - # Construct a grid Ising model graph. + # construct graph n = 3 g = Graphs(self.spark).gridIsingModel(n) - # Collect the vertex ids. - ids = [v["id"] for v in g.vertices.collect()] - # Verify that every expected vertex id appears. + # check that all the vertices exist + ids = [v['id'] for v in g.vertices.collect()] for i in range(n): for j in range(n): - expected_id = f"{i},{j}" - assert expected_id in ids, f"Vertex {expected_id} not found in {ids}" + self.assertIn('{},{}'.format(i, j), ids) From 18b5da033042e328c08062c03002fba1c7ab7a75 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 13:27:42 -0800 Subject: [PATCH 16/69] Back out version changes to make nose tests pass --- .github/workflows/python-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index 36b6b97e7..157b328f1 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -7,8 +7,8 @@ jobs: matrix: include: - spark-version: 3.5.4 - scala-version: 2.12.20 - python-version: 3.11.11 + scala-version: 2.12.18 + python-version: 3.9.19 runs-on: ubuntu-22.04 env: # define Java options for both official sbt and sbt-extras From 8eca097f11c75c82dd72b2d5de596c935192f400 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 13:30:24 -0800 Subject: [PATCH 17/69] Remove changes to requirements --- python/requirements.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/python/requirements.txt b/python/requirements.txt index fb73319f2..3db67f231 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -1,6 +1,4 @@ # This file should list any python package dependencies. pyspark>=2.0.0 -click==8.1.8 numpy>=1.7 py7zr==0.22.0 -requests==2.32.3 From 277c06fe75fe288657f64778e78d9b0a9712a2ae Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 13:31:16 -0800 Subject: [PATCH 18/69] Put nose back in requirements.txt --- python/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/requirements.txt b/python/requirements.txt index 3db67f231..9893b3cb1 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -1,4 +1,4 @@ # This file should list any python package dependencies. +nose==1.3.7 pyspark>=2.0.0 numpy>=1.7 -py7zr==0.22.0 From b55ee4881849a882717bc0035902a855817c7113 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 13:31:51 -0800 Subject: [PATCH 19/69] Remove version bump to version.sbt --- version.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.sbt b/version.sbt index 6fbb590a4..f72bdcc0e 100644 --- a/version.sbt +++ b/version.sbt @@ -1 +1 @@ -ThisBuild / version := "0.8.5" +ThisBuild / version := "0.8.4" From f8a8fd9ea062ad2e0504ddb7e7e22b70d5c7b013 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 13:39:29 -0800 Subject: [PATCH 20/69] Remove packages related to testing --- python/requirements-dev.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/python/requirements-dev.txt b/python/requirements-dev.txt index b27da4d73..6e596dc62 100644 --- a/python/requirements-dev.txt +++ b/python/requirements-dev.txt @@ -1,5 +1,3 @@ -pytest==8.3.4 -Sphinx==8.1.3 flake8==7.1.1 isort==6.0.0 mypy==1.14.1 From bc2cb36e7f1012c10b12907ff3b6b284e9c9b6c3 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 14:15:36 -0800 Subject: [PATCH 21/69] Remove old setup.py / setup.cfg --- python/setup.cfg | 42 ------------------------------------------ python/setup.py | 35 ----------------------------------- 2 files changed, 77 deletions(-) delete mode 100644 python/setup.cfg delete mode 100644 python/setup.py diff --git a/python/setup.cfg b/python/setup.cfg deleted file mode 100644 index 02a0d5136..000000000 --- a/python/setup.cfg +++ /dev/null @@ -1,42 +0,0 @@ -[metadata] -name = graphframes -version = 0.8.5 -description = GraphFrames: Graph Processing Framework for Apache Spark -long_description = file: ../README.md -long_description_content_type = text/markdown -author = GraphFrames Contributors -author_email = graphframes@googlegroups.com -url = https://pypi.org/project/graphframes-py/ -license = Apache License 2.0 -classifiers = - Development Status :: 4 - Beta - Programming Language :: Python :: 3 - Operating System :: OS Independent - -[options] -packages = find: -package_dir = - = python -include_package_data = True -install_requires = - pyspark>=2.0.0 - click==8.1.8 - numpy>=1.7 - py7zr==0.22.0 - requests==2.32.3 - -[options.packages.find] -where = python - exclude = - tests.py - docs - -[options.extras_require] -dev = - pytest==8.3.4 - Sphinx==8.1.3 - black==25.1.0 - flake8==7.1.1 - isort==6.0.0 - mypy==1.14.1 - pre-commit==3.5.1 diff --git a/python/setup.py b/python/setup.py deleted file mode 100644 index a91fb629a..000000000 --- a/python/setup.py +++ /dev/null @@ -1,35 +0,0 @@ -from setuptools import setup, find_packages # type: ignore -import os - - -def parse_requirements(filename): - """Load requirements from a pip requirements file.""" - with open(filename, encoding="utf-8") as f: - # Filter out comments and empty lines. - return [line.strip() for line in f if line.strip() and not line.startswith("#")] - - -# Read the long description from the README file. -here = os.path.abspath(os.path.dirname(__file__)) - -# Use requirements.txt to get the list of dependencies. -requirements = parse_requirements(os.path.join(here, "requirements.txt")) - -setup( - name="graphframes", - version=open("version.sbt").read().strip(), # Update this version as needed - description="GraphFrames: Graph Processing Framework for Apache Spark", - long_description=open(os.path.join(f"{here}/..", "README.md"), encoding="utf-8").read(), - long_description_content_type="text/markdown", - author="GraphFrames Contributors", - author_email="graphframes@googlegroups.com", - url="https://pypi.org/project/graphframes-py", - packages=find_packages(where="python"), - package_dir={"": "python"}, - include_package_data=True, # Include non-code files specified in MANIFEST.in - install_requires=requirements, - classifiers=[ - "Programming Language :: Python :: 3", - "Operating System :: OS Independent", - ], -) From 728be33b6dfd2ee7135711df752289966afdbc2a Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 14:15:46 -0800 Subject: [PATCH 22/69] New pyproject.toml and poetry.lock --- python/poetry.lock | 360 ++++++++++++++++++++++++++++++++++++++++++ python/pyproject.toml | 38 +++++ 2 files changed, 398 insertions(+) create mode 100644 python/poetry.lock create mode 100644 python/pyproject.toml diff --git a/python/poetry.lock b/python/poetry.lock new file mode 100644 index 000000000..6eb61618d --- /dev/null +++ b/python/poetry.lock @@ -0,0 +1,360 @@ +# This file is automatically @generated by Poetry 2.0.1 and should not be changed by hand. + +[[package]] +name = "black" +version = "25.1.0" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "black-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:759e7ec1e050a15f89b770cefbf91ebee8917aac5c20483bc2d80a6c3a04df32"}, + {file = "black-25.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e519ecf93120f34243e6b0054db49c00a35f84f195d5bce7e9f5cfc578fc2da"}, + {file = "black-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:055e59b198df7ac0b7efca5ad7ff2516bca343276c466be72eb04a3bcc1f82d7"}, + {file = "black-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:db8ea9917d6f8fc62abd90d944920d95e73c83a5ee3383493e35d271aca872e9"}, + {file = "black-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a39337598244de4bae26475f77dda852ea00a93bd4c728e09eacd827ec929df0"}, + {file = "black-25.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96c1c7cd856bba8e20094e36e0f948718dc688dba4a9d78c3adde52b9e6c2299"}, + {file = "black-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bce2e264d59c91e52d8000d507eb20a9aca4a778731a08cfff7e5ac4a4bb7096"}, + {file = "black-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:172b1dbff09f86ce6f4eb8edf9dede08b1fce58ba194c87d7a4f1a5aa2f5b3c2"}, + {file = "black-25.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4b60580e829091e6f9238c848ea6750efed72140b91b048770b64e74fe04908b"}, + {file = "black-25.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e2978f6df243b155ef5fa7e558a43037c3079093ed5d10fd84c43900f2d8ecc"}, + {file = "black-25.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b48735872ec535027d979e8dcb20bf4f70b5ac75a8ea99f127c106a7d7aba9f"}, + {file = "black-25.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:ea0213189960bda9cf99be5b8c8ce66bb054af5e9e861249cd23471bd7b0b3ba"}, + {file = "black-25.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8f0b18a02996a836cc9c9c78e5babec10930862827b1b724ddfe98ccf2f2fe4f"}, + {file = "black-25.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:afebb7098bfbc70037a053b91ae8437c3857482d3a690fefc03e9ff7aa9a5fd3"}, + {file = "black-25.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:030b9759066a4ee5e5aca28c3c77f9c64789cdd4de8ac1df642c40b708be6171"}, + {file = "black-25.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:a22f402b410566e2d1c950708c77ebf5ebd5d0d88a6a2e87c86d9fb48afa0d18"}, + {file = "black-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1ee0a0c330f7b5130ce0caed9936a904793576ef4d2b98c40835d6a65afa6a0"}, + {file = "black-25.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3df5f1bf91d36002b0a75389ca8663510cf0531cca8aa5c1ef695b46d98655f"}, + {file = "black-25.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d9e6827d563a2c820772b32ce8a42828dc6790f095f441beef18f96aa6f8294e"}, + {file = "black-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:bacabb307dca5ebaf9c118d2d2f6903da0d62c9faa82bd21a33eecc319559355"}, + {file = "black-25.1.0-py3-none-any.whl", hash = "sha256:95e8176dae143ba9097f351d174fdaf0ccd29efb414b362ae3fd72bf0f710717"}, + {file = "black-25.1.0.tar.gz", hash = "sha256:33496d5cd1222ad73391352b4ae8da15253c5de89b93a80b3e2c8d9a19ec2666"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.10)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "click" +version = "8.1.8" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, + {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["dev"] +markers = "platform_system == \"Windows\"" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "flake8" +version = "7.1.2" +description = "the modular source code checker: pep8 pyflakes and co" +optional = false +python-versions = ">=3.8.1" +groups = ["dev"] +files = [ + {file = "flake8-7.1.2-py2.py3-none-any.whl", hash = "sha256:1cbc62e65536f65e6d754dfe6f1bada7f5cf392d6f5db3c2b85892466c3e7c1a"}, + {file = "flake8-7.1.2.tar.gz", hash = "sha256:c586ffd0b41540951ae41af572e6790dbd49fc12b3aa2541685d253d9bd504bd"}, +] + +[package.dependencies] +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.12.0,<2.13.0" +pyflakes = ">=3.2.0,<3.3.0" + +[[package]] +name = "isort" +version = "6.0.0" +description = "A Python utility / library to sort Python imports." +optional = false +python-versions = ">=3.9.0" +groups = ["dev"] +files = [ + {file = "isort-6.0.0-py3-none-any.whl", hash = "sha256:567954102bb47bb12e0fae62606570faacddd441e45683968c8d1734fb1af892"}, + {file = "isort-6.0.0.tar.gz", hash = "sha256:75d9d8a1438a9432a7d7b54f2d3b45cad9a4a0fdba43617d9873379704a8bdf1"}, +] + +[package.extras] +colors = ["colorama"] +plugins = ["setuptools"] + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +optional = false +python-versions = ">=3.6" +groups = ["dev"] +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +groups = ["dev"] +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "nose" +version = "1.3.7" +description = "nose extends unittest to make testing easier" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "nose-1.3.7-py2-none-any.whl", hash = "sha256:dadcddc0aefbf99eea214e0f1232b94f2fa9bd98fa8353711dacb112bfcbbb2a"}, + {file = "nose-1.3.7-py3-none-any.whl", hash = "sha256:9ff7c6cc443f8c51994b34a667bbcf45afd6d945be7477b52e97516fd17c53ac"}, + {file = "nose-1.3.7.tar.gz", hash = "sha256:f1bffef9cbc82628f6e7d7b40d7e255aefaa1adb6a1b1d26c69a8b79e6208a98"}, +] + +[[package]] +name = "numpy" +version = "2.0.2" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "numpy-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51129a29dbe56f9ca83438b706e2e69a39892b5eda6cedcb6b0c9fdc9b0d3ece"}, + {file = "numpy-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f15975dfec0cf2239224d80e32c3170b1d168335eaedee69da84fbe9f1f9cd04"}, + {file = "numpy-2.0.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8c5713284ce4e282544c68d1c3b2c7161d38c256d2eefc93c1d683cf47683e66"}, + {file = "numpy-2.0.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:becfae3ddd30736fe1889a37f1f580e245ba79a5855bff5f2a29cb3ccc22dd7b"}, + {file = "numpy-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2da5960c3cf0df7eafefd806d4e612c5e19358de82cb3c343631188991566ccd"}, + {file = "numpy-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:496f71341824ed9f3d2fd36cf3ac57ae2e0165c143b55c3a035ee219413f3318"}, + {file = "numpy-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a61ec659f68ae254e4d237816e33171497e978140353c0c2038d46e63282d0c8"}, + {file = "numpy-2.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d731a1c6116ba289c1e9ee714b08a8ff882944d4ad631fd411106a30f083c326"}, + {file = "numpy-2.0.2-cp310-cp310-win32.whl", hash = "sha256:984d96121c9f9616cd33fbd0618b7f08e0cfc9600a7ee1d6fd9b239186d19d97"}, + {file = "numpy-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:c7b0be4ef08607dd04da4092faee0b86607f111d5ae68036f16cc787e250a131"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:49ca4decb342d66018b01932139c0961a8f9ddc7589611158cb3c27cbcf76448"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:11a76c372d1d37437857280aa142086476136a8c0f373b2e648ab2c8f18fb195"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:807ec44583fd708a21d4a11d94aedf2f4f3c3719035c76a2bbe1fe8e217bdc57"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8cafab480740e22f8d833acefed5cc87ce276f4ece12fdaa2e8903db2f82897a"}, + {file = "numpy-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a15f476a45e6e5a3a79d8a14e62161d27ad897381fecfa4a09ed5322f2085669"}, + {file = "numpy-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13e689d772146140a252c3a28501da66dfecd77490b498b168b501835041f951"}, + {file = "numpy-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9ea91dfb7c3d1c56a0e55657c0afb38cf1eeae4544c208dc465c3c9f3a7c09f9"}, + {file = "numpy-2.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c1c9307701fec8f3f7a1e6711f9089c06e6284b3afbbcd259f7791282d660a15"}, + {file = "numpy-2.0.2-cp311-cp311-win32.whl", hash = "sha256:a392a68bd329eafac5817e5aefeb39038c48b671afd242710b451e76090e81f4"}, + {file = "numpy-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:286cd40ce2b7d652a6f22efdfc6d1edf879440e53e76a75955bc0c826c7e64dc"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:df55d490dea7934f330006d0f81e8551ba6010a5bf035a249ef61a94f21c500b"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8df823f570d9adf0978347d1f926b2a867d5608f434a7cff7f7908c6570dcf5e"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9a92ae5c14811e390f3767053ff54eaee3bf84576d99a2456391401323f4ec2c"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:a842d573724391493a97a62ebbb8e731f8a5dcc5d285dfc99141ca15a3302d0c"}, + {file = "numpy-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05e238064fc0610c840d1cf6a13bf63d7e391717d247f1bf0318172e759e692"}, + {file = "numpy-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0123ffdaa88fa4ab64835dcbde75dcdf89c453c922f18dced6e27c90d1d0ec5a"}, + {file = "numpy-2.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:96a55f64139912d61de9137f11bf39a55ec8faec288c75a54f93dfd39f7eb40c"}, + {file = "numpy-2.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec9852fb39354b5a45a80bdab5ac02dd02b15f44b3804e9f00c556bf24b4bded"}, + {file = "numpy-2.0.2-cp312-cp312-win32.whl", hash = "sha256:671bec6496f83202ed2d3c8fdc486a8fc86942f2e69ff0e986140339a63bcbe5"}, + {file = "numpy-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:cfd41e13fdc257aa5778496b8caa5e856dc4896d4ccf01841daee1d96465467a"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9059e10581ce4093f735ed23f3b9d283b9d517ff46009ddd485f1747eb22653c"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:423e89b23490805d2a5a96fe40ec507407b8ee786d66f7328be214f9679df6dd"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:2b2955fa6f11907cf7a70dab0d0755159bca87755e831e47932367fc8f2f2d0b"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:97032a27bd9d8988b9a97a8c4d2c9f2c15a81f61e2f21404d7e8ef00cb5be729"}, + {file = "numpy-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e795a8be3ddbac43274f18588329c72939870a16cae810c2b73461c40718ab1"}, + {file = "numpy-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b258c385842546006213344c50655ff1555a9338e2e5e02a0756dc3e803dd"}, + {file = "numpy-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fec9451a7789926bcf7c2b8d187292c9f93ea30284802a0ab3f5be8ab36865d"}, + {file = "numpy-2.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9189427407d88ff25ecf8f12469d4d39d35bee1db5d39fc5c168c6f088a6956d"}, + {file = "numpy-2.0.2-cp39-cp39-win32.whl", hash = "sha256:905d16e0c60200656500c95b6b8dca5d109e23cb24abc701d41c02d74c6b3afa"}, + {file = "numpy-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:a3f4ab0caa7f053f6797fcd4e1e25caee367db3112ef2b6ef82d749530768c73"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7f0a0c6f12e07fa94133c8a67404322845220c06a9e80e85999afe727f7438b8"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:312950fdd060354350ed123c0e25a71327d3711584beaef30cdaa93320c392d4"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26df23238872200f63518dd2aa984cfca675d82469535dc7162dc2ee52d9dd5c"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a46288ec55ebbd58947d31d72be2c63cbf839f0a63b49cb755022310792a3385"}, + {file = "numpy-2.0.2.tar.gz", hash = "sha256:883c987dee1880e2a864ab0dc9892292582510604156762362d9326444636e78"}, +] + +[[package]] +name = "packaging" +version = "24.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, +] + +[[package]] +name = "pathspec" +version = "0.12.1" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, +] + +[[package]] +name = "platformdirs" +version = "4.3.6" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, + {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.11.2)"] + +[[package]] +name = "py4j" +version = "0.10.9.7" +description = "Enables Python programs to dynamically access arbitrary Java objects" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "py4j-0.10.9.7-py2.py3-none-any.whl", hash = "sha256:85defdfd2b2376eb3abf5ca6474b51ab7e0de341c75a02f46dc9b5976f5a5c1b"}, + {file = "py4j-0.10.9.7.tar.gz", hash = "sha256:0b6e5315bb3ada5cf62ac651d107bb2ebc02def3dee9d9548e3baac644ea8dbb"}, +] + +[[package]] +name = "pycodestyle" +version = "2.12.1" +description = "Python style guide checker" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pycodestyle-2.12.1-py2.py3-none-any.whl", hash = "sha256:46f0fb92069a7c28ab7bb558f05bfc0110dac69a0cd23c61ea0040283a9d78b3"}, + {file = "pycodestyle-2.12.1.tar.gz", hash = "sha256:6838eae08bbce4f6accd5d5572075c63626a15ee3e6f842df996bf62f6d73521"}, +] + +[[package]] +name = "pyflakes" +version = "3.2.0" +description = "passive checker of Python programs" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pyflakes-3.2.0-py2.py3-none-any.whl", hash = "sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"}, + {file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"}, +] + +[[package]] +name = "pyspark" +version = "3.5.4" +description = "Apache Spark Python API" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "pyspark-3.5.4.tar.gz", hash = "sha256:1c2926d63020902163f58222466adf6f8016f6c43c1f319b8e7a71dbaa05fc51"}, +] + +[package.dependencies] +py4j = "0.10.9.7" + +[package.extras] +connect = ["googleapis-common-protos (>=1.56.4)", "grpcio (>=1.56.0)", "grpcio-status (>=1.56.0)", "numpy (>=1.15,<2)", "pandas (>=1.0.5)", "pyarrow (>=4.0.0)"] +ml = ["numpy (>=1.15,<2)"] +mllib = ["numpy (>=1.15,<2)"] +pandas-on-spark = ["numpy (>=1.15,<2)", "pandas (>=1.0.5)", "pyarrow (>=4.0.0)"] +sql = ["numpy (>=1.15,<2)", "pandas (>=1.0.5)", "pyarrow (>=4.0.0)"] + +[[package]] +name = "tomli" +version = "2.2.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version < \"3.11\"" +files = [ + {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, + {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, + {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, + {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, + {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, + {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, + {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, + {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, + {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, +] + +[[package]] +name = "typing-extensions" +version = "4.12.2" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version < \"3.11\"" +files = [ + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, +] + +[metadata] +lock-version = "2.1" +python-versions = ">=3.9 <3.13" +content-hash = "430f562a040c0eabc2fe5c93757801dd9d7ed4c5173be37c7fc3808e04668ccd" diff --git a/python/pyproject.toml b/python/pyproject.toml new file mode 100644 index 000000000..076cc3ce4 --- /dev/null +++ b/python/pyproject.toml @@ -0,0 +1,38 @@ +[tool.poetry] +name = "graphframes-py" +version = "0.8.4" +description = "GraphFrames: Graph Processing Framework for Apache Spark" +authors = ["GraphFrames Contributors "] +license = "Apache 2.0" +readme = "../README.md" +packages = [{include = "graphframes"}] + +[tool.poetry.urls] +"Project Homepage" = "https://graphframes.github.io/graphframes" +"PyPi Homepage" = "https://pypi.org/project/graphframes-py" +"Code Repository" = "https://github.com/graphframes/graphframes" +"Bug Tracker" = "https://github.com/graphframes/graphframes/issues" + +[tool.poetry.dependencies] +python = ">=3.9 <3.13" +nose = "1.3.7" +pyspark = ">= 2.0.0" +numpy = ">= 1.7" + +[tool.poetry.group.dev.dependencies] +black = "^25.1.0" +flake8 = "^7.1.1" +isort = "^6.0.0" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" + +[tool.black] +line-length = 100 +target-version = ["py39"] +include = ["graphframes", "test"] + +[tool.isort] +profile = "black" +src_paths = ["graphframes", "test"] From 3cea1a88e85b54662a9126dc56ab52c625ca7b3a Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 14:24:58 -0800 Subject: [PATCH 23/69] Short README for Python package, poetry won't allow a ../README.md path --- python/README.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 python/README.md diff --git a/python/README.md b/python/README.md new file mode 100644 index 000000000..0ab7cd4ba --- /dev/null +++ b/python/README.md @@ -0,0 +1,17 @@ +# GraphFrames `graphframes-py` Python Package + +The is the officila [graphframes-py PyPI package](https://pypi.org/project/graphframes-py/), which is a Python wrapper for the Scala GraphFrames library. This package is maintained by the GraphFrames project and is available on PyPI. + +For instructions on GraphFrames, check the project [../README.md](../README.md). See [Installation and Quick-Start](#installation-and-quick-start) for the best way to install and use GraphFrames. + +## Running `graphframes-py` + +You should use GraphFrames via the `--packages` argument to `pyspark` or `spark-submit`, but this package is helpful in development environments. + +```bash +# Interactive Python +$ pyspark --packages graphframes:graphframes:0.8.4-spark3.5-s_2.12 + +# Submit a script in Scala/Java/Python +$ spark-submit --packages graphframes:graphframes:0.8.4-spark3.5-s_2.12 script.py +``` From 87cc97514c4aa7e1d76b5a3bb80fd5ee4e2abf50 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 14:25:41 -0800 Subject: [PATCH 24/69] Remove requirements files in favor of pyproject.toml --- python/requirements-dev.txt | 4 ---- python/requirements.txt | 4 ---- 2 files changed, 8 deletions(-) delete mode 100644 python/requirements-dev.txt delete mode 100644 python/requirements.txt diff --git a/python/requirements-dev.txt b/python/requirements-dev.txt deleted file mode 100644 index 6e596dc62..000000000 --- a/python/requirements-dev.txt +++ /dev/null @@ -1,4 +0,0 @@ -flake8==7.1.1 -isort==6.0.0 -mypy==1.14.1 -pre-commit==4.0.1 diff --git a/python/requirements.txt b/python/requirements.txt deleted file mode 100644 index 9893b3cb1..000000000 --- a/python/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -# This file should list any python package dependencies. -nose==1.3.7 -pyspark>=2.0.0 -numpy>=1.7 From 6f84a5a634bcdf731c469644a3509074c3ce58d7 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 14:33:18 -0800 Subject: [PATCH 25/69] Try to poetrize CI build --- .github/workflows/python-ci.yml | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index 157b328f1..47a484c1e 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -31,15 +31,13 @@ jobs: - uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - - name: Install python dependencies + - name: Build Python package and its dependencies + working-directory: ./python run: | - python -m pip install --upgrade pip wheel - pip install -r ./python/requirements.txt - pip install -r ./python/requirements-dev.txt - pip install pyspark==${{ matrix.spark-version }} + python -m pip install --upgrade poetry + poetry build + poetry install - name: Test run: | - python python/setup.py install - python python/setup.py bdist_wheel export SPARK_HOME=$(python -c "import os; from importlib.util import find_spec; print(os.path.join(os.path.dirname(find_spec('pyspark').origin)))") ./python/run-tests.sh From 9a8eef0d29e2d36129427ae9efa13fc8bb044021 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 15:01:09 -0800 Subject: [PATCH 26/69] pyspark min 3.4 --- python/poetry.lock | 2 +- python/pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/python/poetry.lock b/python/poetry.lock index 6eb61618d..0fb5fb139 100644 --- a/python/poetry.lock +++ b/python/poetry.lock @@ -357,4 +357,4 @@ files = [ [metadata] lock-version = "2.1" python-versions = ">=3.9 <3.13" -content-hash = "430f562a040c0eabc2fe5c93757801dd9d7ed4c5173be37c7fc3808e04668ccd" +content-hash = "52c129fee3e94e69edf727f219bc7582ddbfcedf6c43547a7f67a876051bd7c4" diff --git a/python/pyproject.toml b/python/pyproject.toml index 076cc3ce4..0cff88d08 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -16,7 +16,7 @@ packages = [{include = "graphframes"}] [tool.poetry.dependencies] python = ">=3.9 <3.13" nose = "1.3.7" -pyspark = ">= 2.0.0" +pyspark = "^3.4" numpy = ">= 1.7" [tool.poetry.group.dev.dependencies] From 75ecd997d2cfbf0e52799b86b3f9f261e63e375e Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 15:02:53 -0800 Subject: [PATCH 27/69] Local python README in pyproject.toml --- python/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/pyproject.toml b/python/pyproject.toml index 0cff88d08..84050dcc2 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -4,7 +4,7 @@ version = "0.8.4" description = "GraphFrames: Graph Processing Framework for Apache Spark" authors = ["GraphFrames Contributors "] license = "Apache 2.0" -readme = "../README.md" +readme = "README.md" packages = [{include = "graphframes"}] [tool.poetry.urls] From 80231d0e2262eb1044a619dbd2792f6cdcc41d35 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 15:23:20 -0800 Subject: [PATCH 28/69] Trying to remove he working folder to debug scala issue --- .github/workflows/python-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index 47a484c1e..3af7339b0 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -32,7 +32,7 @@ jobs: with: python-version: ${{ matrix.python-version }} - name: Build Python package and its dependencies - working-directory: ./python + # working-directory: ./python run: | python -m pip install --upgrade poetry poetry build From 2a9170baad6e6d2791f258841b7db54cecec251d Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 15:50:44 -0800 Subject: [PATCH 29/69] Set Python working directory again --- .github/workflows/python-ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index 3af7339b0..f863785b0 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -10,6 +10,7 @@ jobs: scala-version: 2.12.18 python-version: 3.9.19 runs-on: ubuntu-22.04 + env: # define Java options for both official sbt and sbt-extras JAVA_OPTS: -Xms2048M -Xmx2048M -Xss6M -XX:ReservedCodeCacheSize=256M -Dfile.encoding=UTF-8 @@ -32,7 +33,7 @@ jobs: with: python-version: ${{ matrix.python-version }} - name: Build Python package and its dependencies - # working-directory: ./python + working-directory: ./python run: | python -m pip install --upgrade poetry poetry build From 3de22636760c3059361efd5c6135c99236c88949 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 15:51:43 -0800 Subject: [PATCH 30/69] Accidental newline --- .github/workflows/python-ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index f863785b0..47a484c1e 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -10,7 +10,6 @@ jobs: scala-version: 2.12.18 python-version: 3.9.19 runs-on: ubuntu-22.04 - env: # define Java options for both official sbt and sbt-extras JAVA_OPTS: -Xms2048M -Xmx2048M -Xss6M -XX:ReservedCodeCacheSize=256M -Dfile.encoding=UTF-8 From 4662717935fd3629a237d1ab454ba6fc6b42327f Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 16:10:08 -0800 Subject: [PATCH 31/69] Install Python for test... --- .github/workflows/python-ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index 47a484c1e..519c5fb4a 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -39,5 +39,8 @@ jobs: poetry install - name: Test run: | + python -m pip install --upgrade poetry + poetry build + poetry install export SPARK_HOME=$(python -c "import os; from importlib.util import find_spec; print(os.path.join(os.path.dirname(find_spec('pyspark').origin)))") ./python/run-tests.sh From 1b7b9f83a82cb120cd831cbeb38a71065d9030fd Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 16:19:15 -0800 Subject: [PATCH 32/69] Run tests from python/ folder --- .github/workflows/python-ci.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index 519c5fb4a..72ffe6e22 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -38,9 +38,7 @@ jobs: poetry build poetry install - name: Test + working-directory: ./python run: | - python -m pip install --upgrade poetry - poetry build - poetry install export SPARK_HOME=$(python -c "import os; from importlib.util import find_spec; print(os.path.join(os.path.dirname(find_spec('pyspark').origin)))") ./python/run-tests.sh From 58da4932cb3997b797a8ec9f98e6bd95e49f543e Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 16:37:58 -0800 Subject: [PATCH 33/69] Try running tests from python/ --- .github/workflows/python-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index 72ffe6e22..2e3e44311 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -41,4 +41,4 @@ jobs: working-directory: ./python run: | export SPARK_HOME=$(python -c "import os; from importlib.util import find_spec; print(os.path.join(os.path.dirname(find_spec('pyspark').origin)))") - ./python/run-tests.sh + ./run-tests.sh From 9f4aa24e6d77ccb45c42b4ea8bf02b1905e826a1 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 16:45:10 -0800 Subject: [PATCH 34/69] poetry run the unit tests --- .github/workflows/python-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index 2e3e44311..3d939db65 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -40,5 +40,5 @@ jobs: - name: Test working-directory: ./python run: | - export SPARK_HOME=$(python -c "import os; from importlib.util import find_spec; print(os.path.join(os.path.dirname(find_spec('pyspark').origin)))") + export SPARK_HOME=$(poetry run python -c "import os; from importlib.util import find_spec; spec = find_spec('pyspark'); print(os.path.join(os.path.dirname(spec.origin)))") ./run-tests.sh From 11b2782e519a518287b62b8e6969bc7b2f2f0947 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 16:49:18 -0800 Subject: [PATCH 35/69] poetry run the tests --- python/run-tests.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/python/run-tests.sh b/python/run-tests.sh index af4e0a139..4c558dfd3 100755 --- a/python/run-tests.sh +++ b/python/run-tests.sh @@ -38,7 +38,7 @@ echo $pyver LIBS="" for lib in "$SPARK_HOME/python/lib"/*zip ; do - LIBS=$LIBS:$lib + LIBS=$LIBS:$lib done # The current directory of the script. @@ -51,7 +51,7 @@ assembly_path="$DIR/../target/scala-$scala_version_major_minor" echo `ls $assembly_path/graphframes-assembly*.jar` JAR_PATH="" for assembly in $assembly_path/graphframes-assembly*.jar ; do - JAR_PATH=$assembly + JAR_PATH=$assembly done export PYSPARK_SUBMIT_ARGS="--driver-memory 2g --executor-memory 2g --jars $JAR_PATH pyspark-shell " @@ -64,14 +64,14 @@ export PYTHONPATH=$PYTHONPATH:graphframes # Run test suites if [[ "$python_major" == "2" ]]; then - - # Horrible hack for spark 1.x: we manually remove some log lines to stay below the 4MB log limit on Travis. - $PYSPARK_DRIVER_PYTHON `which nosetests` -v --all-modules -w $DIR 2>&1 | grep -vE "INFO (ParquetOutputFormat|SparkContext|ContextCleaner|ShuffleBlockFetcherIterator|MapOutputTrackerMaster|TaskSetManager|Executor|MemoryStore|CacheManager|BlockManager|DAGScheduler|PythonRDD|TaskSchedulerImpl|ZippedPartitionsRDD2)"; - + + # Horrible hack for spark 1.x: we manually remove some log lines to stay below the 4MB log limit on Travis. + poetry run $PYSPARK_DRIVER_PYTHON `which nosetests` -v --all-modules -w $DIR 2>&1 | grep -vE "INFO (ParquetOutputFormat|SparkContext|ContextCleaner|ShuffleBlockFetcherIterator|MapOutputTrackerMaster|TaskSetManager|Executor|MemoryStore|CacheManager|BlockManager|DAGScheduler|PythonRDD|TaskSchedulerImpl|ZippedPartitionsRDD2)"; + else - - $PYSPARK_DRIVER_PYTHON -m "nose" -v --all-modules -w $DIR 2>&1 | grep -vE "INFO (ParquetOutputFormat|SparkContext|ContextCleaner|ShuffleBlockFetcherIterator|MapOutputTrackerMaster|TaskSetManager|Executor|MemoryStore|CacheManager|BlockManager|DAGScheduler|PythonRDD|TaskSchedulerImpl|ZippedPartitionsRDD2)"; - + + poetry run $PYSPARK_DRIVER_PYTHON -m "nose" -v --all-modules -w $DIR 2>&1 | grep -vE "INFO (ParquetOutputFormat|SparkContext|ContextCleaner|ShuffleBlockFetcherIterator|MapOutputTrackerMaster|TaskSetManager|Executor|MemoryStore|CacheManager|BlockManager|DAGScheduler|PythonRDD|TaskSchedulerImpl|ZippedPartitionsRDD2)"; + fi # Exit immediately if the tests fail. From 9772344b96fb353a3f7ad17f9198a28ee0aef568 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 16:52:30 -0800 Subject: [PATCH 36/69] Try just using 'python' instead of a path --- python/run-tests.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/run-tests.sh b/python/run-tests.sh index 4c558dfd3..6527a60a7 100755 --- a/python/run-tests.sh +++ b/python/run-tests.sh @@ -66,11 +66,11 @@ export PYTHONPATH=$PYTHONPATH:graphframes if [[ "$python_major" == "2" ]]; then # Horrible hack for spark 1.x: we manually remove some log lines to stay below the 4MB log limit on Travis. - poetry run $PYSPARK_DRIVER_PYTHON `which nosetests` -v --all-modules -w $DIR 2>&1 | grep -vE "INFO (ParquetOutputFormat|SparkContext|ContextCleaner|ShuffleBlockFetcherIterator|MapOutputTrackerMaster|TaskSetManager|Executor|MemoryStore|CacheManager|BlockManager|DAGScheduler|PythonRDD|TaskSchedulerImpl|ZippedPartitionsRDD2)"; + poetry run python `which nosetests` -v --all-modules -w $DIR 2>&1 | grep -vE "INFO (ParquetOutputFormat|SparkContext|ContextCleaner|ShuffleBlockFetcherIterator|MapOutputTrackerMaster|TaskSetManager|Executor|MemoryStore|CacheManager|BlockManager|DAGScheduler|PythonRDD|TaskSchedulerImpl|ZippedPartitionsRDD2)"; else - poetry run $PYSPARK_DRIVER_PYTHON -m "nose" -v --all-modules -w $DIR 2>&1 | grep -vE "INFO (ParquetOutputFormat|SparkContext|ContextCleaner|ShuffleBlockFetcherIterator|MapOutputTrackerMaster|TaskSetManager|Executor|MemoryStore|CacheManager|BlockManager|DAGScheduler|PythonRDD|TaskSchedulerImpl|ZippedPartitionsRDD2)"; + poetry run python -m "nose" -v --all-modules -w $DIR 2>&1 | grep -vE "INFO (ParquetOutputFormat|SparkContext|ContextCleaner|ShuffleBlockFetcherIterator|MapOutputTrackerMaster|TaskSetManager|Executor|MemoryStore|CacheManager|BlockManager|DAGScheduler|PythonRDD|TaskSchedulerImpl|ZippedPartitionsRDD2)"; fi From d55dbfe4815c2f0b0870cdc53b65fb9d9a075b42 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 16:58:08 -0800 Subject: [PATCH 37/69] poetry run the last line, graphframes.main --- python/run-tests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/run-tests.sh b/python/run-tests.sh index 6527a60a7..0382efbd0 100755 --- a/python/run-tests.sh +++ b/python/run-tests.sh @@ -83,4 +83,4 @@ test ${PIPESTATUS[0]} -eq 0 || exit 1; cd "$DIR" -$PYSPARK_PYTHON -u ./graphframes/graphframe.py "$@" +poetry run python -u ./graphframes/graphframe.py "$@" From 2fc4d0818f35a86874b67f86893f48b5f83d7285 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 16:59:23 -0800 Subject: [PATCH 38/69] Remove test/ folder from style paths, it doesn't exist --- python/pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/pyproject.toml b/python/pyproject.toml index 84050dcc2..e21c4cc80 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -31,8 +31,8 @@ build-backend = "poetry.core.masonry.api" [tool.black] line-length = 100 target-version = ["py39"] -include = ["graphframes", "test"] +include = ["graphframes"] [tool.isort] profile = "black" -src_paths = ["graphframes", "test"] +src_paths = ["graphframes"] From 8297a13232f29f9466f8c0ac3bd577e2cbb066ea Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 17:18:13 -0800 Subject: [PATCH 39/69] Remove .vscode --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 7036d69e3..93246acbe 100644 --- a/.gitignore +++ b/.gitignore @@ -27,7 +27,6 @@ project/plugins/project/ # Mac *.DS_Store -.vscode # Python specific python/build From 2035d9854344a53ce4ba77c1d6a4f7478763f963 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 17:18:42 -0800 Subject: [PATCH 40/69] VERSION back to 0.8.4 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 7ada0d303..b60d71966 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.8.5 +0.8.4 From f9f4bd7b9dbdf0bf18e1dde83090bdc59d5fc23d Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 17:19:55 -0800 Subject: [PATCH 41/69] Remove tutorials reference --- python/MANIFEST.in | 1 - 1 file changed, 1 deletion(-) diff --git a/python/MANIFEST.in b/python/MANIFEST.in index 4eb0ee5af..8e453d713 100644 --- a/python/MANIFEST.in +++ b/python/MANIFEST.in @@ -5,4 +5,3 @@ recursive-include python/graphframes *.py recursive-exclude * __pycache__ recursive-exclude * *.pyc -include graphframes/tutorials/data/.exists From 9ddd6b24cefc4528a9bfa75e8d8ddf3d365b8eaf Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 17:23:35 -0800 Subject: [PATCH 42/69] VERSION is a Python thing, it belongs in python/ --- VERSION => python/VERSION | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename VERSION => python/VERSION (100%) diff --git a/VERSION b/python/VERSION similarity index 100% rename from VERSION rename to python/VERSION From 7065647d6cf0be0513af34bf355aea21ff5a2090 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 17:33:27 -0800 Subject: [PATCH 43/69] Include the README.md and LICENSE in the Python package --- python/MANIFEST.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/python/MANIFEST.in b/python/MANIFEST.in index 8e453d713..f883d48c1 100644 --- a/python/MANIFEST.in +++ b/python/MANIFEST.in @@ -5,3 +5,5 @@ recursive-include python/graphframes *.py recursive-exclude * __pycache__ recursive-exclude * *.pyc +include README.md +include LICENSE From a6c7e91f151ae7f04268f98c52aed995855e881f Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Sun, 16 Feb 2025 17:34:21 -0800 Subject: [PATCH 44/69] Some classifiers for pyproject.toml --- python/pyproject.toml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/python/pyproject.toml b/python/pyproject.toml index e21c4cc80..8c0c1ba05 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -6,6 +6,16 @@ authors = ["GraphFrames Contributors "] license = "Apache 2.0" readme = "README.md" packages = [{include = "graphframes"}] +classifiers = [ + "Development Status :: 4 - Beta", + "License :: OSI Approved :: Apache Software License", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12" +] [tool.poetry.urls] "Project Homepage" = "https://graphframes.github.io/graphframes" From 51e3e6d95d312d83e01d91151bcc90e5e9a63edf Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Mon, 17 Feb 2025 08:49:21 -0800 Subject: [PATCH 45/69] Trying poetry install action instead of manual install --- .github/workflows/python-ci.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index 3d939db65..1095ce49e 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -31,10 +31,16 @@ jobs: - uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} + - name: Install and configure Poetry + uses: snok/install-poetry@v1 + with: + version: 2.1.1 + virtualenvs-create: true + virtualenvs-in-project: false + installer-parallel: true - name: Build Python package and its dependencies working-directory: ./python run: | - python -m pip install --upgrade poetry poetry build poetry install - name: Test From 272be064e60f3c07817533a1e02b5a0eec2b89cf Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Mon, 17 Feb 2025 08:53:55 -0800 Subject: [PATCH 46/69] Removing SPARK_HOME --- .github/workflows/python-ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index 1095ce49e..7f201a049 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -46,5 +46,4 @@ jobs: - name: Test working-directory: ./python run: | - export SPARK_HOME=$(poetry run python -c "import os; from importlib.util import find_spec; spec = find_spec('pyspark'); print(os.path.join(os.path.dirname(spec.origin)))") ./run-tests.sh From 45879995d1c6c6bc22a9f82b59290f7912b5ba3b Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Mon, 17 Feb 2025 09:46:00 -0800 Subject: [PATCH 47/69] Returned SPARK_HOME settings --- .github/workflows/python-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index 7f201a049..1095ce49e 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -46,4 +46,5 @@ jobs: - name: Test working-directory: ./python run: | + export SPARK_HOME=$(poetry run python -c "import os; from importlib.util import find_spec; spec = find_spec('pyspark'); print(os.path.join(os.path.dirname(spec.origin)))") ./run-tests.sh From 2422b226b341cdf728fdaaf9ca109833d6ad11fe Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Mon, 17 Feb 2025 10:06:54 -0800 Subject: [PATCH 48/69] Minimized the PR to just these files --- python/MANIFEST.in | 1 + python/graphframes/tutorials/download.py | 64 ++ python/graphframes/tutorials/motif.py | 207 +++++++ python/graphframes/tutorials/stackexchange.py | 579 ++++++++++++++++++ python/graphframes/tutorials/utils.py | 122 ++++ 5 files changed, 973 insertions(+) create mode 100755 python/graphframes/tutorials/download.py create mode 100644 python/graphframes/tutorials/motif.py create mode 100644 python/graphframes/tutorials/stackexchange.py create mode 100644 python/graphframes/tutorials/utils.py diff --git a/python/MANIFEST.in b/python/MANIFEST.in index 73eaf8ba2..22100a328 100644 --- a/python/MANIFEST.in +++ b/python/MANIFEST.in @@ -2,3 +2,4 @@ # https://github.com/pypa/sampleproject/blob/master/MANIFEST.in # For more details about the MANIFEST file, you may read the docs at # https://docs.python.org/2/distutils/sourcedist.html#the-manifest-in-template +include graphframes/tutorials/data/.exists diff --git a/python/graphframes/tutorials/download.py b/python/graphframes/tutorials/download.py new file mode 100755 index 000000000..154d84c14 --- /dev/null +++ b/python/graphframes/tutorials/download.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python + +import os +import click +import requests +import py7zr + + +@click.command() +@click.argument("subdomain") +@click.option("--data-dir", default="python/graphframes/tutorials/data", help="Directory to store downloaded files") +@click.option( + "--extract/--no-extract", default=True, help="Whether to extract the archive after download" +) +def download_stackexchange(subdomain: str, data_dir: str, extract: bool) -> None: + """Download Stack Exchange archive for a given SUBDOMAIN. + + Example: python/graphframes/tutorials/download.py stats.meta + + Note: This won't work for stackoverflow.com archives due to size. + """ + # Create data directory if it doesn't exist + os.makedirs(data_dir, exist_ok=True) + + # Construct archive URL and filename + archive_url = f"https://archive.org/download/stackexchange/{subdomain}.stackexchange.com.7z" + archive_path = os.path.join(data_dir, f"{subdomain}.stackexchange.com.7z") + + click.echo(f"Downloading archive from {archive_url}") + + try: + # Download the file + response = requests.get(archive_url, stream=True) + response.raise_for_status() # Raise exception for bad status codes + + total_size = int(response.headers.get("content-length", 0)) + + with click.progressbar(length=total_size, label="Downloading") as bar: + with open(archive_path, "wb") as f: + for chunk in response.iter_content(chunk_size=8192): + if chunk: + f.write(chunk) + bar.update(len(chunk)) + + click.echo(f"Download complete: {archive_path}") + + # Extract if requested + if extract: + click.echo("Extracting archive...") + output_dir = f"{subdomain}.stackexchange.com" + with py7zr.SevenZipFile(archive_path, mode="r") as z: + z.extractall(path=os.path.join(data_dir, output_dir)) + click.echo(f"Extraction complete: {output_dir}") + + except requests.exceptions.RequestException as e: + click.echo(f"Error downloading archive: {e}", err=True) + raise click.Abort() + except py7zr.Bad7zFile as e: + click.echo(f"Error extracting archive: {e}", err=True) + raise click.Abort() + + +if __name__ == "__main__": + download_stackexchange() diff --git a/python/graphframes/tutorials/motif.py b/python/graphframes/tutorials/motif.py new file mode 100644 index 000000000..4a2189c56 --- /dev/null +++ b/python/graphframes/tutorials/motif.py @@ -0,0 +1,207 @@ +# Demonstrate GraphFrames network motif finding capabilities + +# +# Interactive Usage: pyspark --packages graphframes:graphframes:0.8.4-spark3.5-s_2.12 +# +# Batch Usage: spark-submit --packages graphframes:graphframes:0.8.4-spark3.5-s_2.12 python/graphframes/tutorials/motif.py +# + +import pyspark.sql.functions as F +from pyspark import SparkContext +from pyspark.sql import DataFrame, SparkSession + +from graphframes import GraphFrame + +# Initialize a SparkSession +spark: SparkSession = ( + SparkSession.builder.appName("Stack Overflow Motif Analysis") + # Lets the Id:(Stack Overflow int) and id:(GraphFrames ULID) coexist + .config("spark.sql.caseSensitive", True).getOrCreate() +) +sc: SparkContext = spark.sparkContext +sc.setCheckpointDir("/tmp/graphframes-checkpoints") + +# Change me if you download a different stackexchange site +STACKEXCHANGE_SITE = "stats.meta.stackexchange.com" +BASE_PATH = f"python/graphframes/tutorials/data/{STACKEXCHANGE_SITE}" + +# +# Load the nodes and edges from disk, repartition, checkpoint [plan got long for some reason] and cache. +# + +# We created these in stackexchange.py from Stack Exchange data dump XML files +NODES_PATH: str = f"{BASE_PATH}/Nodes.parquet" +nodes_df: DataFrame = spark.read.parquet(NODES_PATH) + +# Repartition the nodes to give our motif searches parallelism +nodes_df = nodes_df.repartition(50).checkpoint().cache() + +# We created these in stackexchange.py from Stack Exchange data dump XML files +EDGES_PATH: str = f"{BASE_PATH}/Edges.parquet" +edges_df: DataFrame = spark.read.parquet(EDGES_PATH) + +# Repartition the edges to give our motif searches parallelism +edges_df = edges_df.repartition(50).checkpoint().cache() + +# What kind of nodes we do we have to work with? +node_counts = ( + nodes_df.select("id", F.col("Type").alias("Node Type")) + .groupBy("Node Type") + .count() + .orderBy(F.col("count").desc()) + # Add a comma formatted column for display + .withColumn("count", F.format_number(F.col("count"), 0)) +) +node_counts.show() + +# What kind of edges do we have to work with? +edge_counts = ( + edges_df.select("src", "dst", F.col("relationship").alias("Edge Type")) + .groupBy("Edge Type") + .count() + .orderBy(F.col("count").desc()) + # Add a comma formatted column for display + .withColumn("count", F.format_number(F.col("count"), 0)) +) +edge_counts.show() + +g = GraphFrame(nodes_df, edges_df) + +g.vertices.show(10) +print(f"Node columns: {g.vertices.columns}") + +g.edges.sample(0.0001).show(10) + +# Sanity test that all edges have valid ids +edge_count = g.edges.count() +valid_edge_count = ( + g.edges.join(g.vertices, on=g.edges.src == g.vertices.id) + .select("src", "dst", "relationship") + .join(g.vertices, on=g.edges.dst == g.vertices.id) + .count() +) + +# Just up and die if we have edges that point to non-existent nodes +assert ( + edge_count == valid_edge_count +), f"Edge count {edge_count} != valid edge count {valid_edge_count}" +print(f"Edge count: {edge_count:,} == Valid edge count: {valid_edge_count:,}") + +# G4: Continuous Triangles +paths = g.find("(a)-[e1]->(b); (b)-[e2]->(c); (c)-[e3]->(a)") + +# Show the first path +paths.show(3) + +graphlet_type_df = paths.select( + F.col("a.Type").alias("A_Type"), + F.col("e1.relationship").alias("(a)-[e1]->(b)"), + F.col("b.Type").alias("B_Type"), + F.col("e2.relationship").alias("(b)-[e2]->(c)"), + F.col("c.Type").alias("C_Type"), + F.col("e3.relationship").alias("(c)-[e3]->(a)"), +) + +graphlet_count_df = ( + graphlet_type_df.groupby( + "A_Type", "(a)-[e1]->(b)", "B_Type", "(b)-[e2]->(c)", "C_Type", "(c)-[e3]->(a)" + ) + .count() + .orderBy(F.col("count").desc()) + # Add a comma formatted column for display + .withColumn("count", F.format_number(F.col("count"), 0)) +) +graphlet_count_df.show() + +# G5: Divergent Triangles +paths = g.find("(a)-[e1]->(b); (a)-[e2]->(c); (c)-[e3]->(b)") + +graphlet_type_df = paths.select( + F.col("a.Type").alias("A_Type"), + F.col("e1.relationship").alias("(a)-[e1]->(b)"), + F.col("b.Type").alias("B_Type"), + F.col("e2.relationship").alias("(a)-[e2]->(c)"), + F.col("c.Type").alias("C_Type"), + F.col("e3.relationship").alias("(c)-[e3]->(b)"), +) + +graphlet_count_df = ( + graphlet_type_df.groupby( + "A_Type", "(a)-[e1]->(b)", "B_Type", "(a)-[e2]->(c)", "C_Type", "(c)-[e3]->(b)" + ) + .count() + .orderBy(F.col("count").desc()) + # Add a comma formatted column for display + .withColumn("count", F.format_number(F.col("count"), 0)) +) +graphlet_count_df.show() + +# G17: A directed 3-path is a surprisingly diverse graphlet +paths = g.find("(a)-[e1]->(b); (b)-[e2]->(c); (d)-[e3]->(c)") + +# Visualize the four-path by counting instances of paths by node / edge type +graphlet_type_df = paths.select( + F.col("a.Type").alias("A_Type"), + F.col("e1.relationship").alias("(a)-[e1]->(b)"), + F.col("b.Type").alias("B_Type"), + F.col("e2.relationship").alias("(b)-[e2]->(c)"), + F.col("c.Type").alias("C_Type"), + F.col("e3.relationship").alias("(d)-[e3]->(c)"), + F.col("d.Type").alias("D_Type"), +) +graphlet_count_df = ( + graphlet_type_df.groupby( + "A_Type", + "(a)-[e1]->(b)", + "B_Type", + "(b)-[e2]->(c)", + "C_Type", + "(d)-[e3]->(c)", + "D_Type", + ) + .count() + .orderBy(F.col("count").desc()) + # Add a comma formatted column for display + .withColumn("count", F.format_number(F.col("count"), 0)) +) +graphlet_count_df.show() + +graphlet_count_df.orderBy( + [ + "A_Type", + "(a)-[e1]->(b)", + "B_Type", + "(b)-[e2]->(c)", + "C_Type", + "(d)-[e3]->(c)", + "D_Type", + ], + ascending=False, +).show(104) + +# A user answers an answer that answers a question that links to an answer. +linked_vote_paths = paths.filter( + (F.col("a.Type") == "Vote") + & (F.col("e1.relationship") == "CastFor") + & (F.col("b.Type") == "Question") + & (F.col("e2.relationship") == "Links") + & (F.col("c.Type") == "Question") + & (F.col("e3.relationship") == "CastFor") + & (F.col("d.Type") == "Vote") +) + +# Sanity check the count - it should match the table above +linked_vote_paths.count() + +b_vote_counts = linked_vote_paths.select("a", "b").distinct().groupBy("b").count() +c_vote_counts = linked_vote_paths.select("c", "d").distinct().groupBy("c").count() + +linked_vote_counts = ( + linked_vote_paths.filter((F.col("a.VoteTypeId") == 2) & (F.col("d.VoteTypeId") == 2)) + .select("b", "c") + .join(b_vote_counts, on="b", how="inner") + .withColumnRenamed("count", "b_count") + .join(c_vote_counts, on="c", how="inner") + .withColumnRenamed("count", "c_count") +) +linked_vote_counts.stat.corr("b_count", "c_count") diff --git a/python/graphframes/tutorials/stackexchange.py b/python/graphframes/tutorials/stackexchange.py new file mode 100644 index 000000000..c52f323bb --- /dev/null +++ b/python/graphframes/tutorials/stackexchange.py @@ -0,0 +1,579 @@ +# Build a Graph out of the Stack Exchange Data Dump XML files + +# +# Interactive Usage: pyspark --packages com.databricks:spark-xml_2.12:0.18.0 +# +# Batch Usage: spark-submit --packages com.databricks:spark-xml_2.12:0.18.0 python/graphframes/tutorials/stackexchange.py +# + +import re +from typing import List, Tuple + +import pyspark.sql.functions as F +import pyspark.sql.types as T +from pyspark.sql import DataFrame, SparkSession + +# Change me if you download a different stackexchange site +STACKEXCHANGE_SITE = "stats.meta.stackexchange.com" +BASE_PATH = f"python/graphframes/tutorials/data/{STACKEXCHANGE_SITE}" + + +# +# Some utility functions +# + + +def remove_prefix(df: DataFrame) -> DataFrame: + """Remove the _ prefix present in the fields of the DataFrame""" + field_names = [x.name for x in df.schema] + new_field_names = [x[1:] for x in field_names] + s = [] + + # Substitute the old name for the new one + for old, new in zip(field_names, new_field_names): + s.append(F.col(old).alias(new)) + return df.select(s) + + +@F.udf(returnType=T.ArrayType(T.StringType())) +def split_tags(tags: str) -> List[str]: + if not tags: + return [] + # Remove < and > and split into array + return re.findall(r"<([^>]+)>", tags) + + +# +# Initialize a SparkSession with case sensitivity +# + +spark: SparkSession = ( + SparkSession.builder.appName("Stack Exchange Graph Builder") + # Lets the Id:(Stack Overflow int) and id:(GraphFrames UUID) coexist + .config("spark.sql.caseSensitive", True).getOrCreate() +) + +print("Loading data for stats.meta.stackexchange.com ...") + + +# +# Load the Posts... +# +posts_df: DataFrame = ( + spark.read.format("xml") + .options(rowTag="row") + .options(rootTag="posts") + .load(f"{BASE_PATH}/Posts.xml") +) +print(f"\nTotal Posts: {posts_df.count():,}") + +# Remove the _ prefix from field names +posts_df = remove_prefix(posts_df) + +# Create a list of tags +posts_df = ( + posts_df.withColumn( + "ParsedTags", F.split(F.regexp_replace(F.col("Tags"), "^\\||\\|$", ""), "\\|") + ) + .drop("Tags") + .withColumnRenamed("ParsedTags", "Tags") +) + + +# +# Building blocks: separate the questions and answers +# + +# Do the questions look ok? Questions have NO parent ID and DO have a Title +questions_df: DataFrame = posts_df.filter(posts_df.ParentId.isNull()) +questions_df = questions_df.withColumn("Type", F.lit("Question")).cache() +print(f"\nTotal questions: {questions_df.count():,}\n") + +questions_df.select("ParentId", "Title", "Body").show(10) + +# Answers DO have a ParentId parent post and no Title +answers_df: DataFrame = posts_df.filter(posts_df.ParentId.isNotNull()) +answers_df = answers_df.withColumn("Type", F.lit("Answer")).cache() +print(f"\nTotal answers: {answers_df.count():,}\n") + +answers_df.select("ParentId", "Title", "Body").show(10) + + +# +# Load the PostLinks... +# + +post_links_df = ( + spark.read.format("xml") + .options(rowTag="row") + .options(rootTag="postlinks") + .load(f"{BASE_PATH}/PostLinks.xml") +) +print(f"Total PostLinks: {post_links_df.count():,}") + +# Remove the _ prefix from field names +post_links_df = ( + remove_prefix(post_links_df) + .withColumn( + "LinkType", + F.when(F.col("LinkTypeId") == 1, "Linked") + .when(F.col("LinkTypeId") == 3, "Duplicate") + .otherwise("Unknown"), + ) + .withColumn("Type", F.lit("PostLinks")) +) + + +# +# Load the PostHistory... +# + +post_history_df = ( + spark.read.format("xml") + .options(rowTag="row") + .options(rootTag="posthistory") + .load(f"{BASE_PATH}/PostHistory.xml") +) +print(f"Total PostHistory: {post_history_df.count():,}") + +# Remove the _ prefix from field names +post_history_df = remove_prefix(post_history_df).withColumn("Type", F.lit("PostHistory")) + + +# +# Load the Comments... +# + +comments_df = ( + spark.read.format("xml") + .options(rowTag="row") + .options(rootTag="comments") + .load(f"{BASE_PATH}/Comments.xml") +) +print(f"Total Comments: {comments_df.count():,}") + +# Remove the _ prefix from field names +comments_df = remove_prefix(comments_df).withColumn("Type", F.lit("Comment")) + + +# +# Load the Users... +# + +users_df = ( + spark.read.format("xml") + .options(rowTag="row") + .options(rootTag="users") + .load(f"{BASE_PATH}/Users.xml") +) +print(f"Total Users: {users_df.count():,}") + +# Remove the _ prefix from field names +users_df = remove_prefix(users_df).withColumn("Type", F.lit("User")) + + +# +# Load the Votes... +# + +votes_df = ( + spark.read.format("xml") + .options(rowTag="row") + .options(rootTag="votes") + .load(f"{BASE_PATH}/Votes.xml") +) +print(f"Total Votes: {votes_df.count():,}") + +# Remove the _ prefix from field names +votes_df = remove_prefix(votes_df).withColumn("Type", F.lit("Vote")) + +# Add a VoteType column +votes_df = votes_df.withColumn( + "VoteType", + F.when(F.col("VoteTypeId") == 2, "UpVote") + .when(F.col("VoteTypeId") == 3, "DownVote") + .when(F.col("VoteTypeId") == 4, "Favorite") + .when(F.col("VoteTypeId") == 5, "Close") + .when(F.col("VoteTypeId") == 6, "Reopen") + .when(F.col("VoteTypeId") == 7, "BountyStart") + .when(F.col("VoteTypeId") == 8, "BountyClose") + .when(F.col("VoteTypeId") == 9, "Deletion") + .when(F.col("VoteTypeId") == 10, "Undeletion") + .when(F.col("VoteTypeId") == 11, "Spam") + .when(F.col("VoteTypeId") == 12, "InformModerator") + .otherwise("Unknown"), +) + + +# +# Load the Tags... +# + +tags_df = ( + spark.read.format("xml") + .options(rowTag="row") + .options(rootTag="tags") + .load(f"{BASE_PATH}/Tags.xml") +) +print(f"Total Tags: {tags_df.count():,}") + +# Remove the _ prefix from field names +tags_df = remove_prefix(tags_df).withColumn("Type", F.lit("Tag")) + + +# +# Load the Badges... +# + +badges_df = ( + spark.read.format("xml") + .options(rowTag="row") + .options(rootTag="badges") + .load(f"{BASE_PATH}/Badges.xml") +) +print(f"Total Badges: {badges_df.count():,}\n") + +# Remove the _ prefix from field names +badges_df = remove_prefix(badges_df).withColumn("Type", F.lit("Badge")) + + +# +# Form the nodes from the UNION of posts, users, votes and their combined schemas +# + +all_cols: List[Tuple[str, T.StructField]] = list( + set( + list(zip(answers_df.columns, answers_df.schema)) + + list(zip(questions_df.columns, questions_df.schema)) + + list(zip(post_links_df.columns, post_links_df.schema)) + + list(zip(comments_df.columns, comments_df.schema)) + + list(zip(users_df.columns, users_df.schema)) + + list(zip(votes_df.columns, votes_df.schema)) + + list(zip(tags_df.columns, tags_df.schema)) + + list(zip(badges_df.columns, badges_df.schema)) + ) +) +all_column_names: List[str] = sorted([x[0] for x in all_cols]) + + +def add_missing_columns(df: DataFrame, all_cols: List[Tuple[str, T.StructField]]) -> DataFrame: + """Add any missing columns from any DataFrame among several we want to merge.""" + for col_name, schema_field in all_cols: + if col_name not in df.columns: + df = df.withColumn(col_name, F.lit(None).cast(schema_field.dataType)) + return df + + +# Now apply this function to each of your DataFrames to get a consistent schema +# posts_df = add_missing_columns(posts_df, all_cols).select(all_column_names) +questions_df = add_missing_columns(questions_df, all_cols).select(all_column_names) +answers_df = add_missing_columns(answers_df, all_cols).select(all_column_names) +post_links_df = add_missing_columns(post_links_df, all_cols).select(all_column_names) +users_df = add_missing_columns(users_df, all_cols).select(all_column_names) +votes_df = add_missing_columns(votes_df, all_cols).select(all_column_names) +tags_df = add_missing_columns(tags_df, all_cols).select(all_column_names) +badges_df = add_missing_columns(badges_df, all_cols).select(all_column_names) +assert ( + set(questions_df.columns) + == set(answers_df.columns) + == set(post_links_df.columns) + == set(users_df.columns) + == set(votes_df.columns) + == set(all_column_names) + == set(tags_df.columns) + == set(badges_df.columns) +) + +# Now union them together and remove duplicates +nodes_df: DataFrame = ( + questions_df.unionByName(answers_df) + .unionByName(post_links_df) + .unionByName(users_df) + .unionByName(votes_df) + .unionByName(tags_df) + .unionByName(badges_df) + .distinct() +) +print(f"Total distinct nodes: {nodes_df.count():,}") + +# Now add a unique ID field +nodes_df = nodes_df.withColumn("id", F.expr("uuid()")).select("id", *all_column_names) + +# Now create posts - combined questions and answers for things that can apply to them both +posts_df = questions_df.unionByName(answers_df).cache() + +# +# Store the nodes to disk, reload and cache +# + +NODES_PATH: str = f"{BASE_PATH}/Nodes.parquet" + +# Write to disk and load back again +nodes_df.write.mode("overwrite").parquet(NODES_PATH) +nodes_df = spark.read.parquet(NODES_PATH) + +nodes_df.select("id", "Type").groupBy("Type").count().orderBy(F.col("count").desc()).show() + +# +---------+------+ +# | Type| count| +# +---------+------+ +# | Badge|43,029| +# | Vote|42,593| +# | User|37,709| +# | Answer| 2,978| +# | Question| 2,025| +# |PostLinks| 1,274| +# | Tag| 143| +# +---------+------+ + +# Helps performance of GraphFrames' algorithms +nodes_df = nodes_df.cache() + +# Make sure we have the right columns and cached data +posts_df = nodes_df.filter(nodes_df.Type.isin("Question", "Answer")).cache() +questions_df = nodes_df.filter(nodes_df.Type == "Question").cache() +answers_df = nodes_df.filter(nodes_df.Type == "Answer").cache() +post_links_df = nodes_df.filter(nodes_df.Type == "PostLinks").cache() +users_df = nodes_df.filter(nodes_df.Type == "User").cache() +votes_df = nodes_df.filter(nodes_df.Type == "Vote").cache() +tags_df = nodes_df.filter(nodes_df.Type == "Tag").cache() +badges_df = nodes_df.filter(nodes_df.Type == "Badge").cache() + + +# +# Build the edges DataFrame: +# +# * [Vote]--CastFor-->[Post] +# * [User]--Asks-->[Question] +# * [User]--Posts-->[Answer] +# * [Post]--Answers-->[Question] +# * [Tag]--Tags-->[Post] +# * [User]--Earns-->[Badge] +# * [Post]--Links-->[Post] +# +# Remember: 'src', 'dst' and 'relationship' are standard edge fields in GraphFrames +# Remember: we must produce src/dst based on lowercase 'id' UUID, not 'Id' which is Stack Overflow's integer. +# + +# +# Create a [Vote]--CastFor-->[Post] edge... remember a Post is a Question or Answer +# + +src_vote_df: DataFrame = votes_df.select( + F.col("id").alias("src"), + F.col("Id").alias("VoteId"), + # Everything has all the fields - should build from base records but need UUIDs + F.col("PostId").alias("VotePostId"), +) +cast_for_edge_df: DataFrame = src_vote_df.join( + posts_df, on=src_vote_df.VotePostId == posts_df.Id, how="inner" +).select( + # 'src' comes from the votes' 'id' + "src", + # 'dst' comes from the posts' 'id' + F.col("id").alias("dst"), + # All edges have a 'relationship' field + F.lit("CastFor").alias("relationship"), +) +print(f"Total CastFor edges: {cast_for_edge_df.count():,}") +print(f"Percentage of linked votes: {cast_for_edge_df.count() / votes_df.count():.2%}\n") + +# +# Create a [User]--Asks-->[Question] edge +# + +questions_asked_df: DataFrame = questions_df.select( + F.col("OwnerUserId").alias("QuestionUserId"), + F.col("id").alias("dst"), + F.lit("Asks").alias("relationship"), +) +user_asks_edges_df: DataFrame = questions_asked_df.join( + users_df, on=questions_asked_df.QuestionUserId == users_df.Id, how="inner" +).select( + # 'src' comes from the users' 'id' + F.col("id").alias("src"), + # 'dst' comes from the posts' 'id' + "dst", + # All edges have a 'relationship' field + "relationship", +) +print(f"Total Asks edges: {user_asks_edges_df.count():,}") +print( + f"Percentage of asked questions linked to users: {user_asks_edges_df.count() / questions_df.count():.2%}\n" +) + +# +# Create a [User]--Posts-->[Answer] edge. +# + +user_answers_df: DataFrame = answers_df.select( + F.col("OwnerUserId").alias("AnswerUserId"), + F.col("id").alias("dst"), + F.lit("Posts").alias("relationship"), +) +user_answers_edges_df = user_answers_df.join( + users_df, on=user_answers_df.AnswerUserId == users_df.Id, how="inner" +).select( + # 'src' comes from the users' 'id' + F.col("id").alias("src"), + # 'dst' comes from the posts' 'id' + "dst", + # All edges have a 'relationship' field + "relationship", +) +print(f"Total User Answers edges: {user_answers_edges_df.count():,}") +print( + f"Percentage of answers linked to users: {user_answers_edges_df.count() / answers_df.count():.2%}\n" +) + +# +# Create a [Answer]--Answers-->[Question] edge +# + +src_answers_df: DataFrame = answers_df.select( + F.col("id").alias("src"), + F.col("Id").alias("AnswerId"), + F.col("ParentId").alias("AnswerParentId"), +) +question_answers_edges_df: DataFrame = src_answers_df.join( + posts_df, on=src_answers_df.AnswerParentId == questions_df.Id, how="inner" +).select( + # 'src' comes from the answers' 'id' + "src", + # 'dst' comes from the posts' 'id' + F.col("id").alias("dst"), + # All edges have a 'relationship' field + F.lit("Answers").alias("relationship"), +) +print(f"Total Posts Answers edges: {question_answers_edges_df.count():,}") +print( + f"Percentage of linked answers: {question_answers_edges_df.count() / answers_df.count():.2%}\n" +) + +# +# Create a [Tag]--Tags-->[Post] edge... remember a Post is a Question or Answer +# + +src_tags_df: DataFrame = posts_df.select( + F.col("id").alias("dst"), + # First remove leading/trailing < and >, then split on "><" + F.explode("Tags").alias("Tag"), +) +tags_edge_df: DataFrame = src_tags_df.join( + tags_df, on=src_tags_df.Tag == tags_df.TagName, how="inner" +).select( + # 'src' comes from the posts' 'id' + F.col("id").alias("src"), + # 'dst' comes from the tags' 'id' + "dst", + # All edges have a 'relationship' field + F.lit("Tags").alias("relationship"), +) +print(f"Total Tags edges: {tags_edge_df.count():,}") +print(f"Percentage of linked tags: {tags_edge_df.count() / posts_df.count():.2%}\n") + +# +# Create a [User]--Earns-->[Badge] edge +# + +earns_edges_df: DataFrame = badges_df.select( + F.col("UserId").alias("BadgeUserId"), + F.col("id").alias("dst"), + F.lit("Earns").alias("relationship"), +) +earns_edges_df = earns_edges_df.join( + users_df, on=earns_edges_df.BadgeUserId == users_df.Id, how="inner" +).select( + # 'src' comes from the users' 'id' + F.col("id").alias("src"), + # 'dst' comes from the badges' 'id' + "dst", + # All edges have a 'relationship' field + "relationship", +) +print(f"Total Earns edges: {earns_edges_df.count():,}") +print(f"Percentage of earned badges: {earns_edges_df.count() / badges_df.count():.2%}\n") + +# +# Create a [Post]--Links-->[Post] edge... remember a Post is a Question or Answer +# Also a [Post]--Duplicates-->[Post] edge... remember a Post is a Question or Answer +# + +trim_links_df: DataFrame = post_links_df.select( + F.col("PostId").alias("SrcPostId"), + F.col("RelatedPostId").alias("DstPostId"), + "LinkType", +) +links_src_edge_df: DataFrame = trim_links_df.join( + posts_df.drop("LinkType"), on=trim_links_df.SrcPostId == posts_df.Id, how="inner" +).select( + # 'dst' comes from the posts' 'id' + F.col("id").alias("src"), + "DstPostId", + "LinkType", +) +raw_links_edge_df = links_src_edge_df.join( + posts_df.drop("LinkType"), on=links_src_edge_df.DstPostId == posts_df.Id, how="inner" +).select( + "src", + # 'src' comes from the posts' 'id' + F.col("id").alias("dst"), + # All edges have a 'relationship' field + F.lit("Links").alias("relationship"), + "LinkType", +) + +duplicates_edge_df: DataFrame = ( + raw_links_edge_df.filter(F.col("LinkType") == "Duplicate") + .withColumn("relationship", F.lit("Duplicates")) + .select("src", "dst", "relationship") +) +print(f"Total Duplicates edges: {duplicates_edge_df.count():,}") +print(f"Percentage of duplicate posts: {duplicates_edge_df.count() / post_links_df.count():.2%}\n") + +linked_edge_df = ( + raw_links_edge_df.filter(F.col("LinkType") == "Linked") + .withColumn("relationship", F.lit("Links")) + .select("src", "dst", "relationship") +) +print(f"Total Links edges: {linked_edge_df.count():,}") +print(f"Percentage of linked posts: {linked_edge_df.count() / post_links_df.count():.2%}\n") + + +# +# Combine all the edges together into one relationships DataFrame +# + +relationships_df: DataFrame = ( + cast_for_edge_df.unionByName(user_asks_edges_df) + .unionByName(user_answers_edges_df) + .unionByName(question_answers_edges_df) + .unionByName(tags_edge_df) + .unionByName(earns_edges_df) + .unionByName(duplicates_edge_df) + .unionByName(linked_edge_df) +) +relationships_df.groupBy("relationship").count().orderBy(F.col("count").desc()).withColumn( + "count", F.format_number(F.col("count"), 0) +).show() + +# +------------+------+ +# |relationship| count| +# +------------+------+ +# | Earns|43,029| +# | CastFor|40,701| +# | Tags| 4,427| +# | Answers| 2,978| +# | Posts| 2,767| +# | Asks| 1,934| +# | Links| 1,180| +# | Duplicates| 88| +# +------------+------+ + +EDGES_PATH: str = f"{BASE_PATH}/Edges.parquet" + +# Write to disk and back again +relationships_df.write.mode("overwrite").parquet(EDGES_PATH) + +spark.stop() +print("Spark stopped.") diff --git a/python/graphframes/tutorials/utils.py b/python/graphframes/tutorials/utils.py new file mode 100644 index 000000000..54ef40f8b --- /dev/null +++ b/python/graphframes/tutorials/utils.py @@ -0,0 +1,122 @@ +from pyspark.sql import DataFrame +from graphframes import GraphFrame +from pyspark.sql import functions as F + + +def three_edge_count(paths: DataFrame) -> DataFrame: + """three_edge_count View the counts of the different types of 3-node graphlets in the graph. + + Parameters + ---------- + paths : pyspark.sql.DataFrame + A DataFrame of 3-paths in the graph. + + Returns + ------- + DataFrame + A DataFrame of the counts of the different types of 3-node graphlets in the graph. + """ + graphlet_type_df = paths.select( + F.col("a.Type").alias("A_Type"), + F.col("e1.relationship").alias("E_relationship"), + F.col("b.Type").alias("B_Type"), + F.col("e2.relationship").alias("E2_relationship"), + F.col("c.Type").alias("C_Type"), + F.col("e3.relationship").alias("E3_relationship"), + F.when(F.col("d").isNotNull(), F.col("d.Type")).alias("D_Type"), + ) + graphlet_count_df = ( + graphlet_type_df.groupby( + "A_Type", "E_relationship", "B_Type", "E2_relationship", "C_Type", "E3_relationship" + ) + .count() + .orderBy(F.col("count").desc()) + # Add a comma formatted column for display + .withColumn("count", F.format_number(F.col("count"), 0)) + ) + return graphlet_count_df + + +def four_edge_count(paths: DataFrame) -> DataFrame: + """four_edge_count View the counts of the different types of 4-node graphlets in the graph. + + Parameters + ---------- + paths : DataFrame + A DataFrame of 4-paths in the graph. + + Returns + ------- + DataFrame + A DataFrame of the counts of the different types of 4-node graphlets in the graph. + """ + + graphlet_type_df = paths.select( + F.col("a.Type").alias("A_Type"), + F.col("e1.relationship").alias("E_relationship"), + F.col("b.Type").alias("B_Type"), + F.col("e2.relationship").alias("E2_relationship"), + F.col("c.Type").alias("C_Type"), + F.col("e3.relationship").alias("E3_relationship"), + F.col("d.Type").alias("D_Type"), + F.col("e4.relationship").alias("E4_relationship"), + F.when(F.col("e").isNotNull(), F.col("e.Type")).alias("E_Type"), + ) + graphlet_count_df = ( + graphlet_type_df.groupby( + "A_Type", + "E_relationship", + "B_Type", + "E2_relationship", + "C_Type", + "E3_relationship", + "D_Type", + "E4_relationship", + ) + .count() + .orderBy(F.col("count").desc()) + # Add a comma formatted column for display + .withColumn("count", F.format_number(F.col("count"), 0)) + ) + return graphlet_count_df + + +def add_degree(g: GraphFrame) -> GraphFrame: + """add_degree compute the degree, adding it as a property of the nodes in the GraphFrame. + + Parameters + ---------- + g : GraphFrame + Any valid GraphFrame + + Returns + ------- + GraphFrame + Same GraphFrame with a 'degree' property added + """ + degree_vertices: DataFrame = g.vertices.join(g.degrees, on="id") + return GraphFrame(degree_vertices, g.edges) + + +def add_type_degree(g: GraphFrame) -> DataFrame: + """add_type_degree add a map property to the vertices with the degree by each type of relationship. + + Parameters + ---------- + g : GraphFrame + Any valid GraphFrame + + Returns + ------- + DataFrame - I am broke, next line is wrong + A GraphFrame with a map[type:degree] 'type_degree' field added to the vertices + """ + type_degree: DataFrame = ( + g.edges.select(F.col("src").alias("id"), "relationship") + .filter(F.col("id").isNotNull()) + .groupby("id", "relationship") + .count() + ) + type_degree = type_degree.withColumn("type_degree", F.create_map(type_degree.columns)) + type_degree = type_degree.select("src", "type_degree") + return g.vertices.join(type_degree, on="src") From 0a1fabad7ba44d8463b0b4b23cdb360181b583cb Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Mon, 17 Feb 2025 10:37:23 -0800 Subject: [PATCH 49/69] Created tutorials dependency group to minimize main bloat --- python/poetry.lock | 848 +++++++++++++++++++++++++++++++++++++++++- python/pyproject.toml | 5 + 2 files changed, 850 insertions(+), 3 deletions(-) diff --git a/python/poetry.lock b/python/poetry.lock index 0fb5fb139..a96131b72 100644 --- a/python/poetry.lock +++ b/python/poetry.lock @@ -47,13 +47,385 @@ d = ["aiohttp (>=3.10)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] +[[package]] +name = "brotli" +version = "1.1.0" +description = "Python bindings for the Brotli compression library" +optional = false +python-versions = "*" +groups = ["tutorials"] +markers = "platform_python_implementation == \"CPython\"" +files = [ + {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1140c64812cb9b06c922e77f1c26a75ec5e3f0fb2bf92cc8c58720dec276752"}, + {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8fd5270e906eef71d4a8d19b7c6a43760c6abcfcc10c9101d14eb2357418de9"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ae56aca0402a0f9a3431cddda62ad71666ca9d4dc3a10a142b9dce2e3c0cda3"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43ce1b9935bfa1ede40028054d7f48b5469cd02733a365eec8a329ffd342915d"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7c4855522edb2e6ae7fdb58e07c3ba9111e7621a8956f481c68d5d979c93032e"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:38025d9f30cf4634f8309c6874ef871b841eb3c347e90b0851f63d1ded5212da"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e6a904cb26bfefc2f0a6f240bdf5233be78cd2488900a2f846f3c3ac8489ab80"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a37b8f0391212d29b3a91a799c8e4a2855e0576911cdfb2515487e30e322253d"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e84799f09591700a4154154cab9787452925578841a94321d5ee8fb9a9a328f0"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f66b5337fa213f1da0d9000bc8dc0cb5b896b726eefd9c6046f699b169c41b9e"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5dab0844f2cf82be357a0eb11a9087f70c5430b2c241493fc122bb6f2bb0917c"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e4fe605b917c70283db7dfe5ada75e04561479075761a0b3866c081d035b01c1"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:1e9a65b5736232e7a7f91ff3d02277f11d339bf34099a56cdab6a8b3410a02b2"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:58d4b711689366d4a03ac7957ab8c28890415e267f9b6589969e74b6e42225ec"}, + {file = "Brotli-1.1.0-cp310-cp310-win32.whl", hash = "sha256:be36e3d172dc816333f33520154d708a2657ea63762ec16b62ece02ab5e4daf2"}, + {file = "Brotli-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:0c6244521dda65ea562d5a69b9a26120769b7a9fb3db2fe9545935ed6735b128"}, + {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a3daabb76a78f829cafc365531c972016e4aa8d5b4bf60660ad8ecee19df7ccc"}, + {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c8146669223164fc87a7e3de9f81e9423c67a79d6b3447994dfb9c95da16e2d6"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30924eb4c57903d5a7526b08ef4a584acc22ab1ffa085faceb521521d2de32dd"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ceb64bbc6eac5a140ca649003756940f8d6a7c444a68af170b3187623b43bebf"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a469274ad18dc0e4d316eefa616d1d0c2ff9da369af19fa6f3daa4f09671fd61"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:524f35912131cc2cabb00edfd8d573b07f2d9f21fa824bd3fb19725a9cf06327"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5b3cc074004d968722f51e550b41a27be656ec48f8afaeeb45ebf65b561481dd"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:19c116e796420b0cee3da1ccec3b764ed2952ccfcc298b55a10e5610ad7885f9"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:510b5b1bfbe20e1a7b3baf5fed9e9451873559a976c1a78eebaa3b86c57b4265"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a1fd8a29719ccce974d523580987b7f8229aeace506952fa9ce1d53a033873c8"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c247dd99d39e0338a604f8c2b3bc7061d5c2e9e2ac7ba9cc1be5a69cb6cd832f"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1b2c248cd517c222d89e74669a4adfa5577e06ab68771a529060cf5a156e9757"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:2a24c50840d89ded6c9a8fdc7b6ed3692ed4e86f1c4a4a938e1e92def92933e0"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f31859074d57b4639318523d6ffdca586ace54271a73ad23ad021acd807eb14b"}, + {file = "Brotli-1.1.0-cp311-cp311-win32.whl", hash = "sha256:39da8adedf6942d76dc3e46653e52df937a3c4d6d18fdc94a7c29d263b1f5b50"}, + {file = "Brotli-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:aac0411d20e345dc0920bdec5548e438e999ff68d77564d5e9463a7ca9d3e7b1"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:32d95b80260d79926f5fab3c41701dbb818fde1c9da590e77e571eefd14abe28"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b760c65308ff1e462f65d69c12e4ae085cff3b332d894637f6273a12a482d09f"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:316cc9b17edf613ac76b1f1f305d2a748f1b976b033b049a6ecdfd5612c70409"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:caf9ee9a5775f3111642d33b86237b05808dafcd6268faa492250e9b78046eb2"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70051525001750221daa10907c77830bc889cb6d865cc0b813d9db7fefc21451"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7f4bf76817c14aa98cc6697ac02f3972cb8c3da93e9ef16b9c66573a68014f91"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0c5516f0aed654134a2fc936325cc2e642f8a0e096d075209672eb321cff408"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c3020404e0b5eefd7c9485ccf8393cfb75ec38ce75586e046573c9dc29967a0"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4ed11165dd45ce798d99a136808a794a748d5dc38511303239d4e2363c0695dc"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4093c631e96fdd49e0377a9c167bfd75b6d0bad2ace734c6eb20b348bc3ea180"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e4c4629ddad63006efa0ef968c8e4751c5868ff0b1c5c40f76524e894c50248"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:861bf317735688269936f755fa136a99d1ed526883859f86e41a5d43c61d8966"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:87a3044c3a35055527ac75e419dfa9f4f3667a1e887ee80360589eb8c90aabb9"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c5529b34c1c9d937168297f2c1fde7ebe9ebdd5e121297ff9c043bdb2ae3d6fb"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ca63e1890ede90b2e4454f9a65135a4d387a4585ff8282bb72964fab893f2111"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e79e6520141d792237c70bcd7a3b122d00f2613769ae0cb61c52e89fd3443839"}, + {file = "Brotli-1.1.0-cp312-cp312-win32.whl", hash = "sha256:5f4d5ea15c9382135076d2fb28dde923352fe02951e66935a9efaac8f10e81b0"}, + {file = "Brotli-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:906bc3a79de8c4ae5b86d3d75a8b77e44404b0f4261714306e3ad248d8ab0951"}, + {file = "Brotli-1.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8bf32b98b75c13ec7cf774164172683d6e7891088f6316e54425fde1efc276d5"}, + {file = "Brotli-1.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7bc37c4d6b87fb1017ea28c9508b36bbcb0c3d18b4260fcdf08b200c74a6aee8"}, + {file = "Brotli-1.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c0ef38c7a7014ffac184db9e04debe495d317cc9c6fb10071f7fefd93100a4f"}, + {file = "Brotli-1.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91d7cc2a76b5567591d12c01f019dd7afce6ba8cba6571187e21e2fc418ae648"}, + {file = "Brotli-1.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a93dde851926f4f2678e704fadeb39e16c35d8baebd5252c9fd94ce8ce68c4a0"}, + {file = "Brotli-1.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f0db75f47be8b8abc8d9e31bc7aad0547ca26f24a54e6fd10231d623f183d089"}, + {file = "Brotli-1.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6967ced6730aed543b8673008b5a391c3b1076d834ca438bbd70635c73775368"}, + {file = "Brotli-1.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7eedaa5d036d9336c95915035fb57422054014ebdeb6f3b42eac809928e40d0c"}, + {file = "Brotli-1.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d487f5432bf35b60ed625d7e1b448e2dc855422e87469e3f450aa5552b0eb284"}, + {file = "Brotli-1.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:832436e59afb93e1836081a20f324cb185836c617659b07b129141a8426973c7"}, + {file = "Brotli-1.1.0-cp313-cp313-win32.whl", hash = "sha256:43395e90523f9c23a3d5bdf004733246fba087f2948f87ab28015f12359ca6a0"}, + {file = "Brotli-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:9011560a466d2eb3f5a6e4929cf4a09be405c64154e12df0dd72713f6500e32b"}, + {file = "Brotli-1.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a090ca607cbb6a34b0391776f0cb48062081f5f60ddcce5d11838e67a01928d1"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2de9d02f5bda03d27ede52e8cfe7b865b066fa49258cbab568720aa5be80a47d"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2333e30a5e00fe0fe55903c8832e08ee9c3b1382aacf4db26664a16528d51b4b"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4d4a848d1837973bf0f4b5e54e3bec977d99be36a7895c61abb659301b02c112"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fdc3ff3bfccdc6b9cc7c342c03aa2400683f0cb891d46e94b64a197910dc4064"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:5eeb539606f18a0b232d4ba45adccde4125592f3f636a6182b4a8a436548b914"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:fd5f17ff8f14003595ab414e45fce13d073e0762394f957182e69035c9f3d7c2"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:069a121ac97412d1fe506da790b3e69f52254b9df4eb665cd42460c837193354"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e93dfc1a1165e385cc8239fab7c036fb2cd8093728cbd85097b284d7b99249a2"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_2_aarch64.whl", hash = "sha256:aea440a510e14e818e67bfc4027880e2fb500c2ccb20ab21c7a7c8b5b4703d75"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_2_i686.whl", hash = "sha256:6974f52a02321b36847cd19d1b8e381bf39939c21efd6ee2fc13a28b0d99348c"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_2_ppc64le.whl", hash = "sha256:a7e53012d2853a07a4a79c00643832161a910674a893d296c9f1259859a289d2"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:d7702622a8b40c49bffb46e1e3ba2e81268d5c04a34f460978c6b5517a34dd52"}, + {file = "Brotli-1.1.0-cp36-cp36m-win32.whl", hash = "sha256:a599669fd7c47233438a56936988a2478685e74854088ef5293802123b5b2460"}, + {file = "Brotli-1.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d143fd47fad1db3d7c27a1b1d66162e855b5d50a89666af46e1679c496e8e579"}, + {file = "Brotli-1.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:11d00ed0a83fa22d29bc6b64ef636c4552ebafcef57154b4ddd132f5638fbd1c"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f733d788519c7e3e71f0855c96618720f5d3d60c3cb829d8bbb722dddce37985"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:929811df5462e182b13920da56c6e0284af407d1de637d8e536c5cd00a7daf60"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b63b949ff929fbc2d6d3ce0e924c9b93c9785d877a21a1b678877ffbbc4423a"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d192f0f30804e55db0d0e0a35d83a9fead0e9a359a9ed0285dbacea60cc10a84"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f296c40e23065d0d6650c4aefe7470d2a25fffda489bcc3eb66083f3ac9f6643"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:919e32f147ae93a09fe064d77d5ebf4e35502a8df75c29fb05788528e330fe74"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:23032ae55523cc7bccb4f6a0bf368cd25ad9bcdcc1990b64a647e7bbcce9cb5b"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:224e57f6eac61cc449f498cc5f0e1725ba2071a3d4f48d5d9dffba42db196438"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:cb1dac1770878ade83f2ccdf7d25e494f05c9165f5246b46a621cc849341dc01"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:3ee8a80d67a4334482d9712b8e83ca6b1d9bc7e351931252ebef5d8f7335a547"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:5e55da2c8724191e5b557f8e18943b1b4839b8efc3ef60d65985bcf6f587dd38"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:d342778ef319e1026af243ed0a07c97acf3bad33b9f29e7ae6a1f68fd083e90c"}, + {file = "Brotli-1.1.0-cp37-cp37m-win32.whl", hash = "sha256:587ca6d3cef6e4e868102672d3bd9dc9698c309ba56d41c2b9c85bbb903cdb95"}, + {file = "Brotli-1.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2954c1c23f81c2eaf0b0717d9380bd348578a94161a65b3a2afc62c86467dd68"}, + {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:efa8b278894b14d6da122a72fefcebc28445f2d3f880ac59d46c90f4c13be9a3"}, + {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:03d20af184290887bdea3f0f78c4f737d126c74dc2f3ccadf07e54ceca3bf208"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6172447e1b368dcbc458925e5ddaf9113477b0ed542df258d84fa28fc45ceea7"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a743e5a28af5f70f9c080380a5f908d4d21d40e8f0e0c8901604d15cfa9ba751"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0541e747cce78e24ea12d69176f6a7ddb690e62c425e01d31cc065e69ce55b48"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cdbc1fc1bc0bff1cef838eafe581b55bfbffaed4ed0318b724d0b71d4d377619"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:890b5a14ce214389b2cc36ce82f3093f96f4cc730c1cffdbefff77a7c71f2a97"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ab4fbee0b2d9098c74f3057b2bc055a8bd92ccf02f65944a241b4349229185a"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:141bd4d93984070e097521ed07e2575b46f817d08f9fa42b16b9b5f27b5ac088"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fce1473f3ccc4187f75b4690cfc922628aed4d3dd013d047f95a9b3919a86596"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d2b35ca2c7f81d173d2fadc2f4f31e88cc5f7a39ae5b6db5513cf3383b0e0ec7"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:af6fa6817889314555aede9a919612b23739395ce767fe7fcbea9a80bf140fe5"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:2feb1d960f760a575dbc5ab3b1c00504b24caaf6986e2dc2b01c09c87866a943"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:4410f84b33374409552ac9b6903507cdb31cd30d2501fc5ca13d18f73548444a"}, + {file = "Brotli-1.1.0-cp38-cp38-win32.whl", hash = "sha256:db85ecf4e609a48f4b29055f1e144231b90edc90af7481aa731ba2d059226b1b"}, + {file = "Brotli-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3d7954194c36e304e1523f55d7042c59dc53ec20dd4e9ea9d151f1b62b4415c0"}, + {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5fb2ce4b8045c78ebbc7b8f3c15062e435d47e7393cc57c25115cfd49883747a"}, + {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7905193081db9bfa73b1219140b3d315831cbff0d8941f22da695832f0dd188f"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a77def80806c421b4b0af06f45d65a136e7ac0bdca3c09d9e2ea4e515367c7e9"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dadd1314583ec0bf2d1379f7008ad627cd6336625d6679cf2f8e67081b83acf"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:901032ff242d479a0efa956d853d16875d42157f98951c0230f69e69f9c09bac"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:22fc2a8549ffe699bfba2256ab2ed0421a7b8fadff114a3d201794e45a9ff578"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ae15b066e5ad21366600ebec29a7ccbc86812ed267e4b28e860b8ca16a2bc474"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:949f3b7c29912693cee0afcf09acd6ebc04c57af949d9bf77d6101ebb61e388c"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:89f4988c7203739d48c6f806f1e87a1d96e0806d44f0fba61dba81392c9e474d"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:de6551e370ef19f8de1807d0a9aa2cdfdce2e85ce88b122fe9f6b2b076837e59"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0737ddb3068957cf1b054899b0883830bb1fec522ec76b1098f9b6e0f02d9419"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:4f3607b129417e111e30637af1b56f24f7a49e64763253bbc275c75fa887d4b2"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:6c6e0c425f22c1c719c42670d561ad682f7bfeeef918edea971a79ac5252437f"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:494994f807ba0b92092a163a0a283961369a65f6cbe01e8891132b7a320e61eb"}, + {file = "Brotli-1.1.0-cp39-cp39-win32.whl", hash = "sha256:f0d8a7a6b5983c2496e364b969f0e526647a06b075d034f3297dc66f3b360c64"}, + {file = "Brotli-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cdad5b9014d83ca68c25d2e9444e28e967ef16e80f6b436918c700c117a85467"}, + {file = "Brotli-1.1.0.tar.gz", hash = "sha256:81de08ac11bcb85841e440c13611c00b67d3bf82698314928d0b676362546724"}, +] + +[[package]] +name = "brotlicffi" +version = "1.1.0.0" +description = "Python CFFI bindings to the Brotli library" +optional = false +python-versions = ">=3.7" +groups = ["tutorials"] +markers = "platform_python_implementation == \"PyPy\"" +files = [ + {file = "brotlicffi-1.1.0.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9b7ae6bd1a3f0df532b6d67ff674099a96d22bc0948955cb338488c31bfb8851"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19ffc919fa4fc6ace69286e0a23b3789b4219058313cf9b45625016bf7ff996b"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9feb210d932ffe7798ee62e6145d3a757eb6233aa9a4e7db78dd3690d7755814"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84763dbdef5dd5c24b75597a77e1b30c66604725707565188ba54bab4f114820"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-win32.whl", hash = "sha256:1b12b50e07c3911e1efa3a8971543e7648100713d4e0971b13631cce22c587eb"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:994a4f0681bb6c6c3b0925530a1926b7a189d878e6e5e38fae8efa47c5d9c613"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2e4aeb0bd2540cb91b069dbdd54d458da8c4334ceaf2d25df2f4af576d6766ca"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b7b0033b0d37bb33009fb2fef73310e432e76f688af76c156b3594389d81391"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54a07bb2374a1eba8ebb52b6fafffa2afd3c4df85ddd38fcc0511f2bb387c2a8"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7901a7dc4b88f1c1475de59ae9be59799db1007b7d059817948d8e4f12e24e35"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce01c7316aebc7fce59da734286148b1d1b9455f89cf2c8a4dfce7d41db55c2d"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:246f1d1a90279bb6069de3de8d75a8856e073b8ff0b09dcca18ccc14cec85979"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc4bc5d82bc56ebd8b514fb8350cfac4627d6b0743382e46d033976a5f80fab6"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37c26ecb14386a44b118ce36e546ce307f4810bc9598a6e6cb4f7fca725ae7e6"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca72968ae4eaf6470498d5c2887073f7efe3b1e7d7ec8be11a06a79cc810e990"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:add0de5b9ad9e9aa293c3aa4e9deb2b61e99ad6c1634e01d01d98c03e6a354cc"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9b6068e0f3769992d6b622a1cd2e7835eae3cf8d9da123d7f51ca9c1e9c333e5"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8557a8559509b61e65083f8782329188a250102372576093c88930c875a69838"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a7ae37e5d79c5bdfb5b4b99f2715a6035e6c5bf538c3746abc8e26694f92f33"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:391151ec86bb1c683835980f4816272a87eaddc46bb91cbf44f62228b84d8cca"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:2f3711be9290f0453de8eed5275d93d286abe26b08ab4a35d7452caa1fef532f"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a807d760763e398bbf2c6394ae9da5815901aa93ee0a37bca5efe78d4ee3171"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa8ca0623b26c94fccc3a1fdd895be1743b838f3917300506d04aa3346fd2a14"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3de0cf28a53a3238b252aca9fed1593e9d36c1d116748013339f0949bfc84112"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6be5ec0e88a4925c91f3dea2bb0013b3a2accda6f77238f76a34a1ea532a1cb0"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d9eb71bb1085d996244439154387266fd23d6ad37161f6f52f1cd41dd95a3808"}, + {file = "brotlicffi-1.1.0.0.tar.gz", hash = "sha256:b77827a689905143f87915310b93b273ab17888fd43ef350d4832c4a71083c13"}, +] + +[package.dependencies] +cffi = ">=1.0.0" + +[[package]] +name = "certifi" +version = "2025.1.31" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +groups = ["tutorials"] +files = [ + {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, + {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, +] + +[[package]] +name = "cffi" +version = "1.17.1" +description = "Foreign Function Interface for Python calling C code." +optional = false +python-versions = ">=3.8" +groups = ["tutorials"] +markers = "platform_python_implementation == \"PyPy\"" +files = [ + {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, + {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"}, + {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"}, + {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"}, + {file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"}, + {file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"}, + {file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"}, + {file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"}, + {file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"}, + {file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"}, + {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"}, + {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"}, + {file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"}, + {file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"}, + {file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"}, + {file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"}, + {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"}, + {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"}, + {file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"}, + {file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"}, + {file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"}, + {file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"}, + {file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"}, + {file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"}, + {file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"}, + {file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"}, + {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, + {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, +] + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "charset-normalizer" +version = "3.4.1" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7" +groups = ["tutorials"] +files = [ + {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-win32.whl", hash = "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765"}, + {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"}, + {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"}, +] + [[package]] name = "click" version = "8.1.8" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" -groups = ["dev"] +groups = ["dev", "tutorials"] files = [ {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, @@ -68,7 +440,7 @@ version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -groups = ["dev"] +groups = ["dev", "tutorials"] markers = "platform_system == \"Windows\"" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, @@ -92,6 +464,77 @@ mccabe = ">=0.7.0,<0.8.0" pycodestyle = ">=2.12.0,<2.13.0" pyflakes = ">=3.2.0,<3.3.0" +[[package]] +name = "idna" +version = "3.10" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.6" +groups = ["tutorials"] +files = [ + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, +] + +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + +[[package]] +name = "inflate64" +version = "1.0.1" +description = "deflate64 compression/decompression library" +optional = false +python-versions = ">=3.9" +groups = ["tutorials"] +files = [ + {file = "inflate64-1.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5122a188995e47a735ab969edc9129d42bbd97b993df5a3f0819b87205ce81b4"}, + {file = "inflate64-1.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:975ed694c680e46a5c0bb872380a9c9da271a91f9c0646561c58e8f3714347d4"}, + {file = "inflate64-1.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8bcaf445d9cda5f7358e0c2b78144641560f8ce9e3e4351099754c49d26a34e8"}, + {file = "inflate64-1.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:daede09baba24117279109b30fdf935195e91957e31b995b86f8dd01711376ee"}, + {file = "inflate64-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0df40eaaba4fb8379d5c4fa5f56cc24741c4f1a91d4aef66438207473351ceaa"}, + {file = "inflate64-1.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ef90855ff63d53c8fd3bfbf85b5280b22f82b9ab2e21a7eee45b8a19d9866c42"}, + {file = "inflate64-1.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5daa4566c0b009c9ab8a6bf18ce407d14f5dbbb0d3068f3a43af939a17e117a7"}, + {file = "inflate64-1.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:d58a360b59685561a8feacee743479a9d7cc17c8d210aa1f2ae221f2513973cb"}, + {file = "inflate64-1.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:31198c5f156806cee05b69b149074042b7b7d39274ff4c259b898e617294ac17"}, + {file = "inflate64-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4ab693bb1cd92573a997f8fe7b90a2ec1e17a507884598f5640656257b95ef49"}, + {file = "inflate64-1.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:95b6a60e305e6e759e37d6c36691fcb87678922c56b3ddc2df06cd56e04f41f6"}, + {file = "inflate64-1.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:711ef889bdb3b3b296881d1e49830a3a896938fba7033c4287f1aed9b9a20111"}, + {file = "inflate64-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3178495970ecb5c6a32167a8b57fdeef3bf4e2843eaf8f2d8f816f523741e36"}, + {file = "inflate64-1.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e8373b7feedf10236eb56d21598a19a3eb51077c3702d0ce3456b827374025e1"}, + {file = "inflate64-1.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cf026d5c885f2d2bbf233e9a0c8c6d046ec727e2467024ffe0ac76b5be308258"}, + {file = "inflate64-1.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:3aa7489241e6c6f6d34b9561efdf06031c35305b864267a5b8f406abcd3e85c5"}, + {file = "inflate64-1.0.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b81b3d373190ecd82901f42afd90b7127e9bdef341032a94db381c750ed3ddb2"}, + {file = "inflate64-1.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dbfddc5dac975227c20997f0ac515917a15421767c6bff0c209ac6ff9d7b17cc"}, + {file = "inflate64-1.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2adeabe79cc2f90bca832673520c8cbad7370f86353e151293add7ca529bed34"}, + {file = "inflate64-1.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b235c97a05dbe2f92f0f057426e4d05a449e1fccf8e9aa88075ea9c6a06a182"}, + {file = "inflate64-1.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19b74e30734dca5f1c83ca07074e1f25bf7b63f4a5ee7e074d9a4cb05af65cd5"}, + {file = "inflate64-1.0.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b298feb85204b5ef148ccf807744c836fffed7c1ed3ec8bc9b4e323a03163291"}, + {file = "inflate64-1.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8a4c75241bc442267f79b8242135f2ded29405662c44b9353d34fbd4fa6e56b3"}, + {file = "inflate64-1.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:7b210392f0830ab27371e36478592f47757f5ea6c09ddb96e2125847b309eb5e"}, + {file = "inflate64-1.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8dd58aa1adc4f98bf9b52baffa8f2ddf589e071a90db2f2bec9024328d4608cf"}, + {file = "inflate64-1.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c108be2b87e88c966570f84f839eb37f489b45dc3fa3046dc228327af6e921bb"}, + {file = "inflate64-1.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:63971c6b096c0d533c0e38b4257f5a7748501a8bc04d00cf239bd06467888703"}, + {file = "inflate64-1.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d0077edb6b1cabfa2223b71a4a725e5755148f551a7a396c7d5698e45fb8828"}, + {file = "inflate64-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f05b5f2a6f1bf2f70e9c20d997261711cbc1ae477379662b05b36911da60a67"}, + {file = "inflate64-1.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f3c7402165f7e15789caa0787e5a349465d9a454105d0c3a0ccf2e9cdfb8117"}, + {file = "inflate64-1.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:39bced168822e4bf2f545d1b6dbeded6db01c32629d9e4549ef2cd1604a12e1b"}, + {file = "inflate64-1.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:70bb6a22d300d8ca25c26bc60afb5662c5a96d97a801962874d0461568512789"}, + {file = "inflate64-1.0.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f3d5ea758358a1cc50f9e8e41de2134e9b5c5ca8bbcd88d1cd135d0e953d0fa8"}, + {file = "inflate64-1.0.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8fa102c834314c3d7edbf249d1be0bce5d12a9e122228a7ac3f861ee82c3dc5c"}, + {file = "inflate64-1.0.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c2ae56a34e6cc2a712418ac82332e5d550ef8599e0ffb64c19b86d63a7df0c5"}, + {file = "inflate64-1.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:9808ae50b5db661770992566e51e648cac286c32bd80892b151e7b1eca81afe8"}, + {file = "inflate64-1.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:04b2788c6a26e1e525f53cc3d8c58782d41f18bef8d2a34a3d58beaaf0bfdd3b"}, + {file = "inflate64-1.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67fd5b1f9e433b0abab8cb91f4da94d16223a5241008268a57f4729fdbfc4dbc"}, + {file = "inflate64-1.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6f3b00c17ae365e82fc3d48ff9a7a566820a6c8c55b4e16c6cfbcbd46505a72"}, + {file = "inflate64-1.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:91c0c1d41c1655fb0189630baaa894a3b778d77062bb90ca11db878422948395"}, + {file = "inflate64-1.0.1.tar.gz", hash = "sha256:3b1c83c22651b5942b35829df526e89602e494192bf021e0d7d0b600e76c429d"}, +] + +[package.extras] +check = ["check-manifest", "flake8", "flake8-black", "flake8-deprecated", "flake8-isort", "mypy (>=1.10.0)", "mypy_extensions (>=0.4.1)", "pygments", "readme-renderer", "twine"] +docs = ["docutils", "sphinx (>=5.0)"] +test = ["pytest"] + [[package]] name = "isort" version = "6.0.0" @@ -120,6 +563,23 @@ files = [ {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, ] +[[package]] +name = "multivolumefile" +version = "0.2.3" +description = "multi volume file wrapper library" +optional = false +python-versions = ">=3.6" +groups = ["tutorials"] +files = [ + {file = "multivolumefile-0.2.3-py3-none-any.whl", hash = "sha256:237f4353b60af1703087cf7725755a1f6fcaeeea48421e1896940cd1c920d678"}, + {file = "multivolumefile-0.2.3.tar.gz", hash = "sha256:a0648d0aafbc96e59198d5c17e9acad7eb531abea51035d08ce8060dcad709d6"}, +] + +[package.extras] +check = ["check-manifest", "flake8", "flake8-black", "isort (>=5.0.3)", "pygments", "readme-renderer", "twine"] +test = ["coverage[toml] (>=5.2)", "coveralls (>=2.1.1)", "hypothesis", "pyannotate", "pytest", "pytest-cov"] +type = ["mypy", "mypy-extensions"] + [[package]] name = "mypy-extensions" version = "1.0.0" @@ -241,6 +701,31 @@ docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-a test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] type = ["mypy (>=1.11.2)"] +[[package]] +name = "psutil" +version = "7.0.0" +description = "Cross-platform lib for process and system monitoring in Python. NOTE: the syntax of this script MUST be kept compatible with Python 2.7." +optional = false +python-versions = ">=3.6" +groups = ["tutorials"] +markers = "sys_platform != \"cygwin\"" +files = [ + {file = "psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25"}, + {file = "psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da"}, + {file = "psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91"}, + {file = "psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34"}, + {file = "psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993"}, + {file = "psutil-7.0.0-cp36-cp36m-win32.whl", hash = "sha256:84df4eb63e16849689f76b1ffcb36db7b8de703d1bc1fe41773db487621b6c17"}, + {file = "psutil-7.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:1e744154a6580bc968a0195fd25e80432d3afec619daf145b9e5ba16cc1d688e"}, + {file = "psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99"}, + {file = "psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553"}, + {file = "psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456"}, +] + +[package.extras] +dev = ["abi3audit", "black (==24.10.0)", "check-manifest", "coverage", "packaging", "pylint", "pyperf", "pypinfo", "pytest", "pytest-cov", "pytest-xdist", "requests", "rstcheck", "ruff", "setuptools", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "virtualenv", "vulture", "wheel"] +test = ["pytest", "pytest-xdist", "setuptools"] + [[package]] name = "py4j" version = "0.10.9.7" @@ -253,6 +738,92 @@ files = [ {file = "py4j-0.10.9.7.tar.gz", hash = "sha256:0b6e5315bb3ada5cf62ac651d107bb2ebc02def3dee9d9548e3baac644ea8dbb"}, ] +[[package]] +name = "py7zr" +version = "0.22.0" +description = "Pure python 7-zip library" +optional = false +python-versions = ">=3.8" +groups = ["tutorials"] +files = [ + {file = "py7zr-0.22.0-py3-none-any.whl", hash = "sha256:993b951b313500697d71113da2681386589b7b74f12e48ba13cc12beca79d078"}, + {file = "py7zr-0.22.0.tar.gz", hash = "sha256:c6c7aea5913535184003b73938490f9a4d8418598e533f9ca991d3b8e45a139e"}, +] + +[package.dependencies] +brotli = {version = ">=1.1.0", markers = "platform_python_implementation == \"CPython\""} +brotlicffi = {version = ">=1.1.0.0", markers = "platform_python_implementation == \"PyPy\""} +inflate64 = ">=1.0.0,<1.1.0" +multivolumefile = ">=0.2.3" +psutil = {version = "*", markers = "sys_platform != \"cygwin\""} +pybcj = ">=1.0.0,<1.1.0" +pycryptodomex = ">=3.16.0" +pyppmd = ">=1.1.0,<1.2.0" +pyzstd = ">=0.15.9" +texttable = "*" + +[package.extras] +check = ["black (>=23.1.0)", "check-manifest", "flake8 (<8)", "flake8-black (>=0.3.6)", "flake8-deprecated", "flake8-isort", "isort (>=5.0.3)", "lxml", "mypy (>=0.940)", "mypy-extensions (>=0.4.1)", "pygments", "readme-renderer", "twine", "types-psutil"] +debug = ["pytest", "pytest-leaks", "pytest-profiling"] +docs = ["docutils", "sphinx (>=5.0)", "sphinx-a4doc", "sphinx-py3doc-enhanced-theme"] +test = ["coverage[toml] (>=5.2)", "coveralls (>=2.1.1)", "py-cpuinfo", "pytest", "pytest-benchmark", "pytest-cov", "pytest-remotedata", "pytest-timeout"] +test-compat = ["libarchive-c"] + +[[package]] +name = "pybcj" +version = "1.0.3" +description = "bcj filter library" +optional = false +python-versions = ">=3.9" +groups = ["tutorials"] +files = [ + {file = "pybcj-1.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0bd8afeacf9173af091a08783aa9111500f5619ce0ae486bffb5ee4d08a331b4"}, + {file = "pybcj-1.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc81d3c941485e7d3c2812834ca005849fe91a624977ed5227658cf952d19696"}, + {file = "pybcj-1.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f01b75621452578ccd48a79819bc95ddac41535e16aa163ea1d86b14258afa00"}, + {file = "pybcj-1.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e08431845702173d50d66cbbd169969d7b7cf67992f5fb7bc27a8c67e19d3d1f"}, + {file = "pybcj-1.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:476f3c815b85e563d13238c4310b9cb47aefd0c51ac1b33312e41fcd079ea94f"}, + {file = "pybcj-1.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:97bfd712bfce0d58099a02acc05b15b1d1aa3e6edf4dd8e018f43349182ffa3f"}, + {file = "pybcj-1.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4d1374806cde777bc6e371f79c7f3acfb2b0906a418e04cf5331866a321633c3"}, + {file = "pybcj-1.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:9245039e0fc87921f702133c019722e333934e61f1c90408f16618d585ff88ec"}, + {file = "pybcj-1.0.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ae30aa62deff1ba40e4f13ef6964cf083ece541dbfb3ec3731c1fc58cc218b7d"}, + {file = "pybcj-1.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6639f5443bc696a981a502c37e1393398a7182d61820eb39ee6d122076b6ad8c"}, + {file = "pybcj-1.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4502c5afa2a41e569b94527bbb46185ee1a378a4fb3e9d7806ad10e892ecdf58"}, + {file = "pybcj-1.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4ff48aaadd8fd91ac02557eec225ce7c1a3b627a6832d6cb723469891b3b242"}, + {file = "pybcj-1.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62668bd0a1aedaa3b779615cf129d9469fd709ab8d944aa07aad68dc189de349"}, + {file = "pybcj-1.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8af60d5eeed32fd1a9f6a2a11eef47cb7ebd80fe9853e709a2c1d9e29108cdf2"}, + {file = "pybcj-1.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:68e1bd1b0836e216cce3d9a33795501dfc956c61ff52768737e26286e65a3771"}, + {file = "pybcj-1.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:05738d44a987422e21f4ee15023a8c4f38a5509fdf6e6f6dfaaf43ca05cef7db"}, + {file = "pybcj-1.0.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:c68a3fe847f22a8393fe71b1b16450b6b9e8ef36faa36d0c03759f58740f6eff"}, + {file = "pybcj-1.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:17f610ede3a766c0ff1869a4dd7750db78d39e4bfc9997f6bef050fe794c051b"}, + {file = "pybcj-1.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:15f776925a4d6f69b344cde9035fc8f1fd02f1f2a4ccb76f4047406c0ea4241d"}, + {file = "pybcj-1.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bdda28e0a20214c7f0e7de9e260122b9197106231249bf07a5ca5b84a5d38a1"}, + {file = "pybcj-1.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:764cba20166fcd9ff580f4d877f17807be057da7d1234caaf54fd5fd5c591387"}, + {file = "pybcj-1.0.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:97cf7f788560c3283a8afe3de585abb849bb1338d007e53fb6441d6ccd202e0a"}, + {file = "pybcj-1.0.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:26d201f773d17d5e8a88785f00fa73a6647e080d933e75ddeb33da7f0baff657"}, + {file = "pybcj-1.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:990047ac176317d42e7059b3cd357ff7c7201f3e3f08b35d083b2004d066cd39"}, + {file = "pybcj-1.0.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:3bbbf22687c9f6c57cc9b605a3a60937230843ff1b5560e2a42133fd4dd5dc73"}, + {file = "pybcj-1.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e0a75d5ec3fa40af865f93f29e613d93fb67dc016fc60e64a4b3a4621076fecd"}, + {file = "pybcj-1.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:631bcdea0d47ae562f118f8404fb6ef5813eb2dcfbcc53c7b9ac6bc5d4c2ef32"}, + {file = "pybcj-1.0.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:75c9430a10e69fbea336668944c0f4a9979e0bb3ab5de820315025c157baa2ae"}, + {file = "pybcj-1.0.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5221652a9c656f6b27fda389cc4888354a287d3e0f6ea6d5b70718b6d9ec110d"}, + {file = "pybcj-1.0.3-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:f6a6c3a776aa9b579c51768d2c727d3912cd8e1c2add61898dc6794b269e7ab3"}, + {file = "pybcj-1.0.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:cb50276bd804f58690571c13e2e6eb26eca6c4a39a611591e2202136dca1b7a5"}, + {file = "pybcj-1.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:623a4eef080f5cb0405ce19f90fa9824e2477f4a85d8b888e613cf7f146b84d1"}, + {file = "pybcj-1.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:47d2a0f33dfd55dfa961502922d2b0f090857585b321f838f1c2510de4e66a9a"}, + {file = "pybcj-1.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cf8ac15785412aa6924818fb86e250ae15e8238b7db7d410e28d3ae0743cdbd3"}, + {file = "pybcj-1.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:de02d2933fef5b26d845d2e002996c5e22c710af5b5dfc930285dff09db885cf"}, + {file = "pybcj-1.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40a0f542dba6d079d702c1c129cc8cdc0f20bf2c5cb45defba8d5ac8e2d691a1"}, + {file = "pybcj-1.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ace508285fd4788845a208dd00f1c7af8e68dd222cf7797ae525562a2eb22bab"}, + {file = "pybcj-1.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6da2b0c120a415fa5620b76110bab487de20f8a108756499fd4df9c92fc10098"}, + {file = "pybcj-1.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9c6347f1e2c78cf2584fddebe6fb9dc036b75020887facec1bab149fd6056c6"}, + {file = "pybcj-1.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:be309c0fbf06b1e8cd1c40b24dd621271b5fb5d9fe7a0becb40ed64ac92ff50b"}, + {file = "pybcj-1.0.3.tar.gz", hash = "sha256:b8873637f0be00ceaa372d0fb81693604b4bbc8decdb2b1ae5f9b84d196788d9"}, +] + +[package.extras] +check = ["check-manifest", "flake8 (<5)", "flake8-black", "flake8-colors", "flake8-isort", "flake8-pyi", "flake8-typing-imports", "mypy (>=1.10.0)", "pygments", "readme-renderer"] +test = ["coverage[toml] (>=5.2)", "hypothesis", "pytest (>=6.0)", "pytest-cov"] + [[package]] name = "pycodestyle" version = "2.12.1" @@ -265,6 +836,61 @@ files = [ {file = "pycodestyle-2.12.1.tar.gz", hash = "sha256:6838eae08bbce4f6accd5d5572075c63626a15ee3e6f842df996bf62f6d73521"}, ] +[[package]] +name = "pycparser" +version = "2.22" +description = "C parser in Python" +optional = false +python-versions = ">=3.8" +groups = ["tutorials"] +markers = "platform_python_implementation == \"PyPy\"" +files = [ + {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, + {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, +] + +[[package]] +name = "pycryptodomex" +version = "3.21.0" +description = "Cryptographic library for Python" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +groups = ["tutorials"] +files = [ + {file = "pycryptodomex-3.21.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:dbeb84a399373df84a69e0919c1d733b89e049752426041deeb30d68e9867822"}, + {file = "pycryptodomex-3.21.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:a192fb46c95489beba9c3f002ed7d93979423d1b2a53eab8771dbb1339eb3ddd"}, + {file = "pycryptodomex-3.21.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:1233443f19d278c72c4daae749872a4af3787a813e05c3561c73ab0c153c7b0f"}, + {file = "pycryptodomex-3.21.0-cp27-cp27m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbb07f88e277162b8bfca7134b34f18b400d84eac7375ce73117f865e3c80d4c"}, + {file = "pycryptodomex-3.21.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:e859e53d983b7fe18cb8f1b0e29d991a5c93be2c8dd25db7db1fe3bd3617f6f9"}, + {file = "pycryptodomex-3.21.0-cp27-cp27m-win32.whl", hash = "sha256:ef046b2e6c425647971b51424f0f88d8a2e0a2a63d3531817968c42078895c00"}, + {file = "pycryptodomex-3.21.0-cp27-cp27m-win_amd64.whl", hash = "sha256:da76ebf6650323eae7236b54b1b1f0e57c16483be6e3c1ebf901d4ada47563b6"}, + {file = "pycryptodomex-3.21.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:c07e64867a54f7e93186a55bec08a18b7302e7bee1b02fd84c6089ec215e723a"}, + {file = "pycryptodomex-3.21.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:56435c7124dd0ce0c8bdd99c52e5d183a0ca7fdcd06c5d5509423843f487dd0b"}, + {file = "pycryptodomex-3.21.0-cp27-cp27mu-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65d275e3f866cf6fe891411be9c1454fb58809ccc5de6d3770654c47197acd65"}, + {file = "pycryptodomex-3.21.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:5241bdb53bcf32a9568770a6584774b1b8109342bd033398e4ff2da052123832"}, + {file = "pycryptodomex-3.21.0-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:34325b84c8b380675fd2320d0649cdcbc9cf1e0d1526edbe8fce43ed858cdc7e"}, + {file = "pycryptodomex-3.21.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:103c133d6cd832ae7266feb0a65b69e3a5e4dbbd6f3a3ae3211a557fd653f516"}, + {file = "pycryptodomex-3.21.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77ac2ea80bcb4b4e1c6a596734c775a1615d23e31794967416afc14852a639d3"}, + {file = "pycryptodomex-3.21.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9aa0cf13a1a1128b3e964dc667e5fe5c6235f7d7cfb0277213f0e2a783837cc2"}, + {file = "pycryptodomex-3.21.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:46eb1f0c8d309da63a2064c28de54e5e614ad17b7e2f88df0faef58ce192fc7b"}, + {file = "pycryptodomex-3.21.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:cc7e111e66c274b0df5f4efa679eb31e23c7545d702333dfd2df10ab02c2a2ce"}, + {file = "pycryptodomex-3.21.0-cp36-abi3-musllinux_1_2_i686.whl", hash = "sha256:770d630a5c46605ec83393feaa73a9635a60e55b112e1fb0c3cea84c2897aa0a"}, + {file = "pycryptodomex-3.21.0-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:52e23a0a6e61691134aa8c8beba89de420602541afaae70f66e16060fdcd677e"}, + {file = "pycryptodomex-3.21.0-cp36-abi3-win32.whl", hash = "sha256:a3d77919e6ff56d89aada1bd009b727b874d464cb0e2e3f00a49f7d2e709d76e"}, + {file = "pycryptodomex-3.21.0-cp36-abi3-win_amd64.whl", hash = "sha256:b0e9765f93fe4890f39875e6c90c96cb341767833cfa767f41b490b506fa9ec0"}, + {file = "pycryptodomex-3.21.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:feaecdce4e5c0045e7a287de0c4351284391fe170729aa9182f6bd967631b3a8"}, + {file = "pycryptodomex-3.21.0-pp27-pypy_73-win32.whl", hash = "sha256:365aa5a66d52fd1f9e0530ea97f392c48c409c2f01ff8b9a39c73ed6f527d36c"}, + {file = "pycryptodomex-3.21.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:3efddfc50ac0ca143364042324046800c126a1d63816d532f2e19e6f2d8c0c31"}, + {file = "pycryptodomex-3.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0df2608682db8279a9ebbaf05a72f62a321433522ed0e499bc486a6889b96bf3"}, + {file = "pycryptodomex-3.21.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5823d03e904ea3e53aebd6799d6b8ec63b7675b5d2f4a4bd5e3adcb512d03b37"}, + {file = "pycryptodomex-3.21.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:27e84eeff24250ffec32722334749ac2a57a5fd60332cd6a0680090e7c42877e"}, + {file = "pycryptodomex-3.21.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8ef436cdeea794015263853311f84c1ff0341b98fc7908e8a70595a68cefd971"}, + {file = "pycryptodomex-3.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a1058e6dfe827f4209c5cae466e67610bcd0d66f2f037465daa2a29d92d952b"}, + {file = "pycryptodomex-3.21.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9ba09a5b407cbb3bcb325221e346a140605714b5e880741dc9a1e9ecf1688d42"}, + {file = "pycryptodomex-3.21.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:8a9d8342cf22b74a746e3c6c9453cb0cfbb55943410e3a2619bd9164b48dc9d9"}, + {file = "pycryptodomex-3.21.0.tar.gz", hash = "sha256:222d0bd05381dd25c32dd6065c071ebf084212ab79bab4599ba9e6a3e0009e6c"}, +] + [[package]] name = "pyflakes" version = "3.2.0" @@ -277,6 +903,77 @@ files = [ {file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"}, ] +[[package]] +name = "pyppmd" +version = "1.1.1" +description = "PPMd compression/decompression library" +optional = false +python-versions = ">=3.9" +groups = ["tutorials"] +files = [ + {file = "pyppmd-1.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:406b184132c69e3f60ea9621b69eaa0c5494e83f82c307b3acce7b86a4f8f888"}, + {file = "pyppmd-1.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c2cf003bb184adf306e1ac1828107307927737dde63474715ba16462e266cbef"}, + {file = "pyppmd-1.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:71c8fd0ecc8d4760e852dd6df19d1a827427cb9e6c9e568cbf5edba7d860c514"}, + {file = "pyppmd-1.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6b5edee08b66ad6c39fd4d34a7ef4cfeb4b69fd6d68957e59cd2db674611a9e"}, + {file = "pyppmd-1.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e95bd23eb1543ab3149f24fe02f6dd2695023326027a4b989fb2c6dba256e75e"}, + {file = "pyppmd-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e633ee4cc19d0c71b3898092c3c4cc20a10bd5e6197229fffac29d68ad5d83b8"}, + {file = "pyppmd-1.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ecaafe2807ef557f0c49b8476a4fa04091b43866072fbcf31b3ceb01a96c9168"}, + {file = "pyppmd-1.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c182fccff60ae8f24f28f5145c36a60708b5b041a25d36b67f23c44923552fa4"}, + {file = "pyppmd-1.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:70c93d19efe67cdac3e7fa2d4e171650a2c4f90127a9781b25e496a43f12fbbc"}, + {file = "pyppmd-1.1.1-cp310-cp310-win32.whl", hash = "sha256:57c75856920a210ed72b553885af7bc06eddfd30ff26b62a3a63cb8f86f3d217"}, + {file = "pyppmd-1.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:d5293f10dc8c1d571b780e0d54426d3d858c19bbd8cb0fe972dcea3906acd05c"}, + {file = "pyppmd-1.1.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:753c5297c91c059443caef33bccbffb10764221739d218046981638aeb9bc5f2"}, + {file = "pyppmd-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9b5a73da09de480a94793c9064876af14a01be117de872737935ac447b7cde3c"}, + {file = "pyppmd-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89c6febb7114dea02a061143d78d04751a945dfcadff77560e9a3d3c7583c24b"}, + {file = "pyppmd-1.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0001e467c35e35e6076a8c32ed9074aa45833615ee16115de9282d5c0985a1d8"}, + {file = "pyppmd-1.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c76820db25596afc859336ba06c01c9be0ff326480beec9c699fd378a546a77f"}, + {file = "pyppmd-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b67f0a228f8c58750a21ba667c170ae957283e08fd580857f13cb686334e5b3e"}, + {file = "pyppmd-1.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b18f24c14f0b0f1757a42c458ae7b6fd7aa0bce8147ac1016a9c134068c1ccc2"}, + {file = "pyppmd-1.1.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c9e43729161cc3b6ad5b04b16bae7665d3c0cc803de047d8a979aa9232a4f94a"}, + {file = "pyppmd-1.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fe057d254528b4eeebe2800baefde47d6af679bae184d3793c13a06f794df442"}, + {file = "pyppmd-1.1.1-cp311-cp311-win32.whl", hash = "sha256:faa51240493a5c53c9b544c99722f70303eea702742bf90f3c3064144342da4a"}, + {file = "pyppmd-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:62486f544d6957e1381147e3961eee647b7f4421795be4fb4f1e29d52aee6cb5"}, + {file = "pyppmd-1.1.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9877ef273e2c0efdec740855e28004a708ada9012e0db6673df4bb6eba3b05e0"}, + {file = "pyppmd-1.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f816a5cbccceced80e15335389eeeaf1b56a605fb7eebe135b1c85bd161e288c"}, + {file = "pyppmd-1.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6bddabf8f2c6b991d15d6785e603d9d414ae4a791f131b1a729bb8a5d31133d1"}, + {file = "pyppmd-1.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:855bc2b0d19c3fead5815d72dbe350b4f765334336cbf8bcb504d46edc9e9dd2"}, + {file = "pyppmd-1.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a95b11b3717c083b912f0879678ba72f301bbdb9b69efed46dbc5df682aa3ce7"}, + {file = "pyppmd-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38b645347b6ea217b0c58e8edac27473802868f152db520344ac8c7490981849"}, + {file = "pyppmd-1.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f8f94b6222262def5b532f2b9716554ef249ad8411fd4da303596cc8c2e8eda1"}, + {file = "pyppmd-1.1.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:1c0306f69ceddf385ef689ebd0218325b7e523c48333d87157b37393466cfa1e"}, + {file = "pyppmd-1.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a4ba510457a56535522a660098399e3fa8722e4de55808d089c9d13435d87069"}, + {file = "pyppmd-1.1.1-cp312-cp312-win32.whl", hash = "sha256:032f040a89fd8348109e8638f94311bd4c3c693fb4cad213ad06a37c203690b1"}, + {file = "pyppmd-1.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:2be8cbd13dd59fad1a0ad38062809e28596f3673b77a799dfe82b287986265ed"}, + {file = "pyppmd-1.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9458f972f090f3846fc5bea0a6f7363da773d3c4b2d4654f1d4ca3c11f6ecbfa"}, + {file = "pyppmd-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:44811a9d958873d857ca81cebf7ba646a0952f8a7bbf8a60cf6ec5d002faa040"}, + {file = "pyppmd-1.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a1b12460958885ca44e433986644009d0599b87a444f668ce3724a46ce588924"}, + {file = "pyppmd-1.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:200c74f05b97b00f047cf60607914a0b50f80991f1fb3677f624a85aa79d9458"}, + {file = "pyppmd-1.1.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ebe0d98a341b32f164e860059243e125398865cc0363b32ffc31f953460fe87"}, + {file = "pyppmd-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf93e1e047a82f1e7e194fcf49da166d2b9d8dc98d7c0b5cd844dc4360d9c1f5"}, + {file = "pyppmd-1.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f5b0b8c746bde378ae3b4df42a11fd8599ba3e5808dfea36e16d722b74bd0506"}, + {file = "pyppmd-1.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bcdd5207b6c79887f25639632ca2623a399d8c54f567973e9ba474b5ebae2b1c"}, + {file = "pyppmd-1.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7bfcca94e5452b6d54ac24a11c2402f6a193c331e5dc221c1f1df71773624374"}, + {file = "pyppmd-1.1.1-cp39-cp39-win32.whl", hash = "sha256:18e99c074664f996f511bc6e87aab46bc4c75f5bd0157d3210292919be35e22c"}, + {file = "pyppmd-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:b29788d5a0f8f39ea46a1255cd886daddf9c64ba9d4cb64677bc93bd3859ac0e"}, + {file = "pyppmd-1.1.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:28648ef56793bf1ed0ff24728642f56fa39cb96ea161dec6ee2d26f97c0cdd28"}, + {file = "pyppmd-1.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:427d6f9b9c011e032db9529b2a15773f2e2944ca490b67d5757f4af33bbda406"}, + {file = "pyppmd-1.1.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34c7a07197a03656c1920fd88e05049c155a955c4de4b8b8a8e5fec19a97b45b"}, + {file = "pyppmd-1.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1fea2eee28beca61165c4714dcd032de76af318553791107d308b4b08575ecc"}, + {file = "pyppmd-1.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:04391e4f82c8c2c316ba60e480300ad1af37ec12bdb5c20f06b502030ff35975"}, + {file = "pyppmd-1.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:cf08a354864c352a94e6e53733009baeab1e7c570010c4f5be226923ecfa09d1"}, + {file = "pyppmd-1.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:334e5fe5d75764b87c591a16d2b2df6f9939e2ad114dacf98bb4b0e7c90911e9"}, + {file = "pyppmd-1.1.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:15d5928b25f04f5431585d17c835cd509a34e1c9f1416653db8d2815e97d4e20"}, + {file = "pyppmd-1.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af06329796a4965788910ac40f1b012d2e173ede08456ceea0ec7fc4d2e69d62"}, + {file = "pyppmd-1.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4ccdd3751e432e71e02de96f16fc8824e4f4bfc47a8b470f0c7aae88dae4c666"}, + {file = "pyppmd-1.1.1.tar.gz", hash = "sha256:f1a812f1e7628f4c26d05de340b91b72165d7b62778c27d322b82ce2e8ff00cb"}, +] + +[package.extras] +check = ["check-manifest", "flake8", "flake8-black", "flake8-isort", "mypy (>=1.10.0)", "pygments", "readme-renderer"] +docs = ["sphinx", "sphinx_rtd_theme"] +fuzzer = ["atheris", "hypothesis"] +test = ["coverage[toml] (>=5.2)", "hypothesis", "pytest (>=6.0)", "pytest-benchmark", "pytest-cov", "pytest-timeout"] + [[package]] name = "pyspark" version = "3.5.4" @@ -298,6 +995,133 @@ mllib = ["numpy (>=1.15,<2)"] pandas-on-spark = ["numpy (>=1.15,<2)", "pandas (>=1.0.5)", "pyarrow (>=4.0.0)"] sql = ["numpy (>=1.15,<2)", "pandas (>=1.0.5)", "pyarrow (>=4.0.0)"] +[[package]] +name = "pyzstd" +version = "0.16.2" +description = "Python bindings to Zstandard (zstd) compression library." +optional = false +python-versions = ">=3.5" +groups = ["tutorials"] +files = [ + {file = "pyzstd-0.16.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:637376c8f8cbd0afe1cab613f8c75fd502bd1016bf79d10760a2d5a00905fe62"}, + {file = "pyzstd-0.16.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3e7a7118cbcfa90ca2ddbf9890c7cb582052a9a8cf2b7e2c1bbaf544bee0f16a"}, + {file = "pyzstd-0.16.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a74cb1ba05876179525144511eed3bd5a509b0ab2b10632c1215a85db0834dfd"}, + {file = "pyzstd-0.16.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7c084dde218ffbf112e507e72cbf626b8f58ce9eb23eec129809e31037984662"}, + {file = "pyzstd-0.16.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4646459ebd3d7a59ddbe9312f020bcf7cdd1f059a2ea07051258f7af87a0b31"}, + {file = "pyzstd-0.16.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14bfc2833cc16d7657fc93259edeeaa793286e5031b86ca5dc861ba49b435fce"}, + {file = "pyzstd-0.16.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f27d488f19e5bf27d1e8aa1ae72c6c0a910f1e1ffbdf3c763d02ab781295dd27"}, + {file = "pyzstd-0.16.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:91e134ca968ff7dcfa8b7d433318f01d309b74ee87e0d2bcadc117c08e1c80db"}, + {file = "pyzstd-0.16.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:6b5f64cd3963c58b8f886eb6139bb8d164b42a74f8a1bb95d49b4804f4592d61"}, + {file = "pyzstd-0.16.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:0b4a8266871b9e0407f9fd8e8d077c3558cf124d174e6357b523d14f76971009"}, + {file = "pyzstd-0.16.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:1bb19f7acac30727354c25125922aa59f44d82e0e6a751df17d0d93ff6a73853"}, + {file = "pyzstd-0.16.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3008325b7368e794d66d4d98f2ee1d867ef5afd09fd388646ae02b25343c420d"}, + {file = "pyzstd-0.16.2-cp310-cp310-win32.whl", hash = "sha256:66f2d5c0bbf5bf32c577aa006197b3525b80b59804450e2c32fbcc2d16e850fd"}, + {file = "pyzstd-0.16.2-cp310-cp310-win_amd64.whl", hash = "sha256:5fe5f5459ebe1161095baa7a86d04ab625b35148f6c425df0347ed6c90a2fd58"}, + {file = "pyzstd-0.16.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1c1bdbe7f01c7f37d5cd07be70e32a84010d7dfd6677920c0de04cf7d245b60d"}, + {file = "pyzstd-0.16.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1882a3ceaaf9adc12212d587d150ec5e58cfa9a765463d803d739abbd3ac0f7a"}, + {file = "pyzstd-0.16.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea46a8b9d60f6a6eba29facba54c0f0d70328586f7ef0da6f57edf7e43db0303"}, + {file = "pyzstd-0.16.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d7865bc06589cdcecdede0deefe3da07809d5b7ad9044c224d7b2a0867256957"}, + {file = "pyzstd-0.16.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:52f938a65b409c02eb825e8c77fc5ea54508b8fc44b5ce226db03011691ae8cc"}, + {file = "pyzstd-0.16.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e97620d3f53a0282947304189deef7ca7f7d0d6dfe15033469dc1c33e779d5e5"}, + {file = "pyzstd-0.16.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7c40e9983d017108670dc8df68ceef14c7c1cf2d19239213274783041d0e64c"}, + {file = "pyzstd-0.16.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7cd4b3b2c6161066e4bde6af1cf78ed3acf5d731884dd13fdf31f1db10830080"}, + {file = "pyzstd-0.16.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:454f31fd84175bb203c8c424f2255a343fa9bd103461a38d1bf50487c3b89508"}, + {file = "pyzstd-0.16.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:5ef754a93743f08fb0386ce3596780bfba829311b49c8f4107af1a4bcc16935d"}, + {file = "pyzstd-0.16.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:be81081db9166e10846934f0e3576a263cbe18d81eca06e6a5c23533f8ce0dc6"}, + {file = "pyzstd-0.16.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:738bcb2fa1e5f1868986f5030955e64de53157fa1141d01f3a4daf07a1aaf644"}, + {file = "pyzstd-0.16.2-cp311-cp311-win32.whl", hash = "sha256:0ea214c9b97046867d1657d55979021028d583704b30c481a9c165191b08d707"}, + {file = "pyzstd-0.16.2-cp311-cp311-win_amd64.whl", hash = "sha256:c17c0fc02f0e75b0c7cd21f8eaf4c6ce4112333b447d93da1773a5f705b2c178"}, + {file = "pyzstd-0.16.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d4081fd841a9efe9ded7290ee7502dbf042c4158b90edfadea3b8a072c8ec4e1"}, + {file = "pyzstd-0.16.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fd3fa45d2aeb65367dd702806b2e779d13f1a3fa2d13d5ec777cfd09de6822de"}, + {file = "pyzstd-0.16.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8b5f0d2c07994a5180d8259d51df6227a57098774bb0618423d7eb4a7303467"}, + {file = "pyzstd-0.16.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60c9d25b15c7ae06ed5d516d096a0d8254f9bed4368b370a09cccf191eaab5cb"}, + {file = "pyzstd-0.16.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:29acf31ce37254f6cad08deb24b9d9ba954f426fa08f8fae4ab4fdc51a03f4ae"}, + {file = "pyzstd-0.16.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ec77612a17697a9f7cf6634ffcee616eba9b997712fdd896e77fd19ab3a0618"}, + {file = "pyzstd-0.16.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:313ea4974be93be12c9a640ab40f0fc50a023178aae004a8901507b74f190173"}, + {file = "pyzstd-0.16.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e91acdefc8c2c6c3b8d5b1b5fe837dce4e591ecb7c0a2a50186f552e57d11203"}, + {file = "pyzstd-0.16.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:929bd91a403539e72b5b5cb97f725ac4acafe692ccf52f075e20cd9bf6e5493d"}, + {file = "pyzstd-0.16.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:740837a379aa32d110911ebcbbc524f9a9b145355737527543a884bd8777ca4f"}, + {file = "pyzstd-0.16.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:adfc0e80dd157e6d1e0b0112c8ecc4b58a7a23760bd9623d74122ef637cfbdb6"}, + {file = "pyzstd-0.16.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:79b183beae1c080ad3dca39019e49b7785391947f9aab68893ad85d27828c6e7"}, + {file = "pyzstd-0.16.2-cp312-cp312-win32.whl", hash = "sha256:b8d00631a3c466bc313847fab2a01f6b73b3165de0886fb03210e08567ae3a89"}, + {file = "pyzstd-0.16.2-cp312-cp312-win_amd64.whl", hash = "sha256:c0d43764e9a60607f35d8cb3e60df772a678935ab0e02e2804d4147377f4942c"}, + {file = "pyzstd-0.16.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3ae9ae7ad730562810912d7ecaf1fff5eaf4c726f4b4dfe04784ed5f06d7b91f"}, + {file = "pyzstd-0.16.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2ce8d3c213f76a564420f3d0137066ac007ce9fb4e156b989835caef12b367a7"}, + {file = "pyzstd-0.16.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2c14dac23c865e2d78cebd9087e148674b7154f633afd4709b4cd1520b99a61"}, + {file = "pyzstd-0.16.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4527969d66a943e36ef374eda847e918077de032d58b5df84d98ffd717b6fa77"}, + {file = "pyzstd-0.16.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd8256149b88e657e99f31e6d4b114c8ff2935951f1d8bb8e1fe501b224999c0"}, + {file = "pyzstd-0.16.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5bd1f1822d65c9054bf36d35307bf8ed4aa2d2d6827431761a813628ff671b1d"}, + {file = "pyzstd-0.16.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6733f4d373ec9ad2c1976cf06f973a3324c1f9abe236d114d6bb91165a397d"}, + {file = "pyzstd-0.16.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7bec165ab6524663f00b69bfefd13a46a69fed3015754abaf81b103ec73d92c6"}, + {file = "pyzstd-0.16.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:e4460fa6949aac6528a1ad0de8871079600b12b3ef4db49316306786a3598321"}, + {file = "pyzstd-0.16.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:75df79ea0315c97d88337953a17daa44023dbf6389f8151903d371513f503e3c"}, + {file = "pyzstd-0.16.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:93e1d45f4a196afb6f18682c79bdd5399277ead105b67f30b35c04c207966071"}, + {file = "pyzstd-0.16.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:075e18b871f38a503b5d23e40a661adfc750bd4bd0bb8b208c1e290f3ceb8fa2"}, + {file = "pyzstd-0.16.2-cp313-cp313-win32.whl", hash = "sha256:9e4295eb299f8d87e3487852bca033d30332033272a801ca8130e934475e07a9"}, + {file = "pyzstd-0.16.2-cp313-cp313-win_amd64.whl", hash = "sha256:18deedc70f858f4cf574e59f305d2a0678e54db2751a33dba9f481f91bc71c28"}, + {file = "pyzstd-0.16.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a9892b707ef52f599098b1e9528df0e7849c5ec01d3e8035fb0e67de4b464839"}, + {file = "pyzstd-0.16.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4fbd647864341f3c174c4a6d7f20e6ea6b4be9d840fb900dc0faf0849561badc"}, + {file = "pyzstd-0.16.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20ac2c15656cc6194c4fed1cb0e8159f9394d4ea1d58be755448743d2ec6c9c4"}, + {file = "pyzstd-0.16.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b239fb9a20c1be3374b9a2bd183ba624fd22ad7a3f67738c0d80cda68b4ae1d3"}, + {file = "pyzstd-0.16.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc52400412cdae2635e0978b8d6bcc0028cc638fdab2fd301f6d157675d26896"}, + {file = "pyzstd-0.16.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b766a6aeb8dbb6c46e622e7a1aebfa9ab03838528273796941005a5ce7257b1"}, + {file = "pyzstd-0.16.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd4b8676052f9d59579242bf3cfe5fd02532b6a9a93ab7737c118ae3b8509dc"}, + {file = "pyzstd-0.16.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1c6c0a677aac7c0e3d2d2605d4d68ffa9893fdeeb2e071040eb7c8750969d463"}, + {file = "pyzstd-0.16.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:15f9c2d612e7e2023d68d321d1b479846751f792af89141931d44e82ae391394"}, + {file = "pyzstd-0.16.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:11740bff847aad23beef4085a1bb767d101895881fe891f0a911aa27d43c372c"}, + {file = "pyzstd-0.16.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:b9067483ebe860e4130a03ee665b3d7be4ec1608b208e645d5e7eb3492379464"}, + {file = "pyzstd-0.16.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:988f0ba19b14c2fe0afefc444ac1edfb2f497b7d7c3212b2f587504cc2ec804e"}, + {file = "pyzstd-0.16.2-cp39-cp39-win32.whl", hash = "sha256:8855acb1c3e3829030b9e9e9973b19e2d70f33efb14ad5c474b4d086864c959c"}, + {file = "pyzstd-0.16.2-cp39-cp39-win_amd64.whl", hash = "sha256:018e88378df5e76f5e1d8cf4416576603b6bc4a103cbc66bb593eaac54c758de"}, + {file = "pyzstd-0.16.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4b631117b97a42ff6dfd0ffc885a92fff462d7c34766b28383c57b996f863338"}, + {file = "pyzstd-0.16.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:56493a3fbe1b651a02102dd0902b0aa2377a732ff3544fb6fb3f114ca18db52f"}, + {file = "pyzstd-0.16.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1eae9bdba4a1e5d3181331f403114ff5b8ce0f4b569f48eba2b9beb2deef1e4"}, + {file = "pyzstd-0.16.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1be6972391c8aeecc7e61feb96ffc8e77a401bcba6ed994e7171330c45a1948"}, + {file = "pyzstd-0.16.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:761439d687e3a5687c2ff5c6a1190e1601362a4a3e8c6c82ff89719d51d73e19"}, + {file = "pyzstd-0.16.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f5fbdb8cf31b60b2dc586fecb9b73e2f172c21a0b320ed275f7b8d8a866d9003"}, + {file = "pyzstd-0.16.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:183f26e34f9becf0f2db38be9c0bfb136753d228bcb47c06c69175901bea7776"}, + {file = "pyzstd-0.16.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:88318b64b5205a67748148d6d244097fa6cf61fcea02ad3435511b9e7155ae16"}, + {file = "pyzstd-0.16.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:73142aa2571b6480136a1865ebda8257e09eabbc8bcd54b222202f6fa4febe1e"}, + {file = "pyzstd-0.16.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d3f8877c29a97f1b1bba16f3d3ab01ad10ad3da7bad317aecf36aaf8848b37c"}, + {file = "pyzstd-0.16.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1f25754562473ac7de856b8331ebd5964f5d85601045627a5f0bb0e4e899990"}, + {file = "pyzstd-0.16.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:6ce17e84310080c55c02827ad9bb17893c00a845c8386a328b346f814aabd2c1"}, + {file = "pyzstd-0.16.2.tar.gz", hash = "sha256:179c1a2ea1565abf09c5f2fd72f9ce7c54b2764cf7369e05c0bfd8f1f67f63d2"}, +] + +[[package]] +name = "requests" +version = "2.32.3" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.8" +groups = ["tutorials"] +files = [ + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "texttable" +version = "1.7.0" +description = "module to create simple ASCII tables" +optional = false +python-versions = "*" +groups = ["tutorials"] +files = [ + {file = "texttable-1.7.0-py2.py3-none-any.whl", hash = "sha256:72227d592c82b3d7f672731ae73e4d1f88cd8e2ef5b075a7a7f01a23a3743917"}, + {file = "texttable-1.7.0.tar.gz", hash = "sha256:2d2068fb55115807d3ac77a4ca68fa48803e84ebb0ee2340f858107a36522638"}, +] + [[package]] name = "tomli" version = "2.2.1" @@ -354,7 +1178,25 @@ files = [ {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] +[[package]] +name = "urllib3" +version = "2.3.0" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.9" +groups = ["tutorials"] +files = [ + {file = "urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df"}, + {file = "urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + [metadata] lock-version = "2.1" python-versions = ">=3.9 <3.13" -content-hash = "52c129fee3e94e69edf727f219bc7582ddbfcedf6c43547a7f67a876051bd7c4" +content-hash = "33ae7f96a3999d6822af7778f9b7878355d811534a4b5fec14d51ec29aa8dce2" diff --git a/python/pyproject.toml b/python/pyproject.toml index 8c0c1ba05..36097e2c9 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -34,6 +34,11 @@ black = "^25.1.0" flake8 = "^7.1.1" isort = "^6.0.0" +[tool.poetry.group.tutorials.dependencies] +py7zr = "^0.22.0" +requests = "^2.32.3" +click = "^8.1.8" + [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" From c0d6d7b58175a04d08f81de7d574979ea2af4610 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Mon, 17 Feb 2025 10:57:04 -0800 Subject: [PATCH 50/69] Make motif.py execute in whole again --- python/graphframes/tutorials/motif.py | 52 ++++++++++++++------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/python/graphframes/tutorials/motif.py b/python/graphframes/tutorials/motif.py index 4a2189c56..2f5eb030c 100644 --- a/python/graphframes/tutorials/motif.py +++ b/python/graphframes/tutorials/motif.py @@ -16,7 +16,8 @@ spark: SparkSession = ( SparkSession.builder.appName("Stack Overflow Motif Analysis") # Lets the Id:(Stack Overflow int) and id:(GraphFrames ULID) coexist - .config("spark.sql.caseSensitive", True).getOrCreate() + .config("spark.sql.caseSensitive", True) + .getOrCreate() ) sc: SparkContext = spark.sparkContext sc.setCheckpointDir("/tmp/graphframes-checkpoints") @@ -25,8 +26,9 @@ STACKEXCHANGE_SITE = "stats.meta.stackexchange.com" BASE_PATH = f"python/graphframes/tutorials/data/{STACKEXCHANGE_SITE}" + # -# Load the nodes and edges from disk, repartition, checkpoint [plan got long for some reason] and cache. +# Load the nodes and edges from disk, repartition, checkpoint [plan got long for some reason] and cache. # # We created these in stackexchange.py from Stack Exchange data dump XML files @@ -45,7 +47,8 @@ # What kind of nodes we do we have to work with? node_counts = ( - nodes_df.select("id", F.col("Type").alias("Node Type")) + nodes_df + .select("id", F.col("Type").alias("Node Type")) .groupBy("Node Type") .count() .orderBy(F.col("count").desc()) @@ -56,7 +59,8 @@ # What kind of edges do we have to work with? edge_counts = ( - edges_df.select("src", "dst", F.col("relationship").alias("Edge Type")) + edges_df + .select("src", "dst", F.col("relationship").alias("Edge Type")) .groupBy("Edge Type") .count() .orderBy(F.col("count").desc()) @@ -65,7 +69,7 @@ ) edge_counts.show() -g = GraphFrame(nodes_df, edges_df) +g = GraphFrame(nodes_df, edges_df) g.vertices.show(10) print(f"Node columns: {g.vertices.columns}") @@ -166,28 +170,25 @@ ) graphlet_count_df.show() -graphlet_count_df.orderBy( - [ - "A_Type", - "(a)-[e1]->(b)", - "B_Type", - "(b)-[e2]->(c)", - "C_Type", - "(d)-[e3]->(c)", - "D_Type", - ], - ascending=False, -).show(104) +graphlet_count_df.orderBy([ + "A_Type", + "(a)-[e1]->(b)", + "B_Type", + "(b)-[e2]->(c)", + "C_Type", + "(d)-[e3]->(c)", + "D_Type", +], ascending=False).show(104) # A user answers an answer that answers a question that links to an answer. linked_vote_paths = paths.filter( - (F.col("a.Type") == "Vote") - & (F.col("e1.relationship") == "CastFor") - & (F.col("b.Type") == "Question") - & (F.col("e2.relationship") == "Links") - & (F.col("c.Type") == "Question") - & (F.col("e3.relationship") == "CastFor") - & (F.col("d.Type") == "Vote") + (F.col("a.Type") == "Vote") & + (F.col("e1.relationship") == "CastFor") & + (F.col("b.Type") == "Question") & + (F.col("e2.relationship") == "Links") & + (F.col("c.Type") == "Question") & + (F.col("e3.relationship") == "CastFor") & + (F.col("d.Type") == "Vote") ) # Sanity check the count - it should match the table above @@ -197,7 +198,8 @@ c_vote_counts = linked_vote_paths.select("c", "d").distinct().groupBy("c").count() linked_vote_counts = ( - linked_vote_paths.filter((F.col("a.VoteTypeId") == 2) & (F.col("d.VoteTypeId") == 2)) + linked_vote_paths + .filter((F.col("a.VoteTypeId") == 2) & (F.col("d.VoteTypeId") == 2)) .select("b", "c") .join(b_vote_counts, on="b", how="inner") .withColumnRenamed("count", "b_count") From 5bb4c26b101b524193076e2870a5f5894e0a9c16 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Mon, 17 Feb 2025 11:55:50 -0800 Subject: [PATCH 51/69] Minor isort format and cleanup of download.py --- python/graphframes/tutorials/download.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/python/graphframes/tutorials/download.py b/python/graphframes/tutorials/download.py index 154d84c14..e81eff8b9 100755 --- a/python/graphframes/tutorials/download.py +++ b/python/graphframes/tutorials/download.py @@ -1,14 +1,21 @@ #!/usr/bin/env python +"""Download and decompress the Stack Exchange data dump from the Internet Archive.""" + import os + import click -import requests import py7zr +import requests # type: ignore @click.command() @click.argument("subdomain") -@click.option("--data-dir", default="python/graphframes/tutorials/data", help="Directory to store downloaded files") +@click.option( + "--data-dir", + default="python/graphframes/tutorials/data", + help="Directory to store downloaded files", +) @click.option( "--extract/--no-extract", default=True, help="Whether to extract the archive after download" ) From 99e6a4d14e6eb7cdc2c001ebefc1c3312ff43ced Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Mon, 17 Feb 2025 11:56:13 -0800 Subject: [PATCH 52/69] Minor isort format and cleanup of utils.py --- python/graphframes/tutorials/utils.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/python/graphframes/tutorials/utils.py b/python/graphframes/tutorials/utils.py index 54ef40f8b..46db14d96 100644 --- a/python/graphframes/tutorials/utils.py +++ b/python/graphframes/tutorials/utils.py @@ -1,7 +1,10 @@ +"""Utilities for Network Moitif Finding Tutorial""" + from pyspark.sql import DataFrame -from graphframes import GraphFrame from pyspark.sql import functions as F +from graphframes import GraphFrame + def three_edge_count(paths: DataFrame) -> DataFrame: """three_edge_count View the counts of the different types of 3-node graphlets in the graph. From 662e197960a424c1f58c151b663c46d9d63da6be Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Mon, 17 Feb 2025 11:57:40 -0800 Subject: [PATCH 53/69] Removed case sensitivity from the script - that was confusing people who just pasted or tried to run the code without a new SparkSession. --- python/graphframes/tutorials/stackexchange.py | 48 ++++++++++++------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/python/graphframes/tutorials/stackexchange.py b/python/graphframes/tutorials/stackexchange.py index c52f323bb..5e029746e 100644 --- a/python/graphframes/tutorials/stackexchange.py +++ b/python/graphframes/tutorials/stackexchange.py @@ -1,4 +1,4 @@ -# Build a Graph out of the Stack Exchange Data Dump XML files +"""Build a Graph out of the Stack Exchange Data Dump XML files.""" # # Interactive Usage: pyspark --packages com.databricks:spark-xml_2.12:0.18.0 @@ -47,11 +47,9 @@ def split_tags(tags: str) -> List[str]: # Initialize a SparkSession with case sensitivity # -spark: SparkSession = ( - SparkSession.builder.appName("Stack Exchange Graph Builder") - # Lets the Id:(Stack Overflow int) and id:(GraphFrames UUID) coexist - .config("spark.sql.caseSensitive", True).getOrCreate() -) +spark: SparkSession = SparkSession.builder.appName("Stack Exchange Graph Builder").getOrCreate() +sc = spark.sparkContext +sc.setCheckpointDir("/tmp/graphframes-checkpoints") print("Loading data for stats.meta.stackexchange.com ...") @@ -296,12 +294,23 @@ def add_missing_columns(df: DataFrame, all_cols: List[Tuple[str, T.StructField]] ) print(f"Total distinct nodes: {nodes_df.count():,}") -# Now add a unique ID field +# Now add a unique lowercase 'id' field - standard for GraphFrames - moving the original... +# Stack Exchange Id to StackId +nodes_df = nodes_df.withColumnRenamed("Id", "StackId").drop("Id") + +# Update the column list... +if "Id" in all_column_names: + all_column_names.remove("Id") +all_column_names += ["StackId"] +all_column_names = sorted(all_column_names) + +# Add the UUID 'id' field for GraphFrames. It will go in edges as 'src' and 'dst' nodes_df = nodes_df.withColumn("id", F.expr("uuid()")).select("id", *all_column_names) # Now create posts - combined questions and answers for things that can apply to them both posts_df = questions_df.unionByName(answers_df).cache() + # # Store the nodes to disk, reload and cache # @@ -361,12 +370,12 @@ def add_missing_columns(df: DataFrame, all_cols: List[Tuple[str, T.StructField]] src_vote_df: DataFrame = votes_df.select( F.col("id").alias("src"), - F.col("Id").alias("VoteId"), + F.col("StackId").alias("VoteId"), # Everything has all the fields - should build from base records but need UUIDs F.col("PostId").alias("VotePostId"), ) cast_for_edge_df: DataFrame = src_vote_df.join( - posts_df, on=src_vote_df.VotePostId == posts_df.Id, how="inner" + posts_df, on=src_vote_df.VotePostId == posts_df.StackId, how="inner" ).select( # 'src' comes from the votes' 'id' "src", @@ -378,6 +387,7 @@ def add_missing_columns(df: DataFrame, all_cols: List[Tuple[str, T.StructField]] print(f"Total CastFor edges: {cast_for_edge_df.count():,}") print(f"Percentage of linked votes: {cast_for_edge_df.count() / votes_df.count():.2%}\n") + # # Create a [User]--Asks-->[Question] edge # @@ -388,7 +398,7 @@ def add_missing_columns(df: DataFrame, all_cols: List[Tuple[str, T.StructField]] F.lit("Asks").alias("relationship"), ) user_asks_edges_df: DataFrame = questions_asked_df.join( - users_df, on=questions_asked_df.QuestionUserId == users_df.Id, how="inner" + users_df, on=questions_asked_df.QuestionUserId == users_df.StackId, how="inner" ).select( # 'src' comes from the users' 'id' F.col("id").alias("src"), @@ -402,6 +412,7 @@ def add_missing_columns(df: DataFrame, all_cols: List[Tuple[str, T.StructField]] f"Percentage of asked questions linked to users: {user_asks_edges_df.count() / questions_df.count():.2%}\n" ) + # # Create a [User]--Posts-->[Answer] edge. # @@ -412,7 +423,7 @@ def add_missing_columns(df: DataFrame, all_cols: List[Tuple[str, T.StructField]] F.lit("Posts").alias("relationship"), ) user_answers_edges_df = user_answers_df.join( - users_df, on=user_answers_df.AnswerUserId == users_df.Id, how="inner" + users_df, on=user_answers_df.AnswerUserId == users_df.StackId, how="inner" ).select( # 'src' comes from the users' 'id' F.col("id").alias("src"), @@ -426,17 +437,18 @@ def add_missing_columns(df: DataFrame, all_cols: List[Tuple[str, T.StructField]] f"Percentage of answers linked to users: {user_answers_edges_df.count() / answers_df.count():.2%}\n" ) + # # Create a [Answer]--Answers-->[Question] edge # src_answers_df: DataFrame = answers_df.select( F.col("id").alias("src"), - F.col("Id").alias("AnswerId"), + F.col("StackId").alias("AnswerId"), F.col("ParentId").alias("AnswerParentId"), ) question_answers_edges_df: DataFrame = src_answers_df.join( - posts_df, on=src_answers_df.AnswerParentId == questions_df.Id, how="inner" + posts_df, on=src_answers_df.AnswerParentId == questions_df.StackId, how="inner" ).select( # 'src' comes from the answers' 'id' "src", @@ -450,6 +462,7 @@ def add_missing_columns(df: DataFrame, all_cols: List[Tuple[str, T.StructField]] f"Percentage of linked answers: {question_answers_edges_df.count() / answers_df.count():.2%}\n" ) + # # Create a [Tag]--Tags-->[Post] edge... remember a Post is a Question or Answer # @@ -472,6 +485,7 @@ def add_missing_columns(df: DataFrame, all_cols: List[Tuple[str, T.StructField]] print(f"Total Tags edges: {tags_edge_df.count():,}") print(f"Percentage of linked tags: {tags_edge_df.count() / posts_df.count():.2%}\n") + # # Create a [User]--Earns-->[Badge] edge # @@ -482,7 +496,7 @@ def add_missing_columns(df: DataFrame, all_cols: List[Tuple[str, T.StructField]] F.lit("Earns").alias("relationship"), ) earns_edges_df = earns_edges_df.join( - users_df, on=earns_edges_df.BadgeUserId == users_df.Id, how="inner" + users_df, on=earns_edges_df.BadgeUserId == users_df.StackId, how="inner" ).select( # 'src' comes from the users' 'id' F.col("id").alias("src"), @@ -494,6 +508,7 @@ def add_missing_columns(df: DataFrame, all_cols: List[Tuple[str, T.StructField]] print(f"Total Earns edges: {earns_edges_df.count():,}") print(f"Percentage of earned badges: {earns_edges_df.count() / badges_df.count():.2%}\n") + # # Create a [Post]--Links-->[Post] edge... remember a Post is a Question or Answer # Also a [Post]--Duplicates-->[Post] edge... remember a Post is a Question or Answer @@ -505,7 +520,7 @@ def add_missing_columns(df: DataFrame, all_cols: List[Tuple[str, T.StructField]] "LinkType", ) links_src_edge_df: DataFrame = trim_links_df.join( - posts_df.drop("LinkType"), on=trim_links_df.SrcPostId == posts_df.Id, how="inner" + posts_df.drop("LinkType"), on=trim_links_df.SrcPostId == posts_df.StackId, how="inner" ).select( # 'dst' comes from the posts' 'id' F.col("id").alias("src"), @@ -513,7 +528,7 @@ def add_missing_columns(df: DataFrame, all_cols: List[Tuple[str, T.StructField]] "LinkType", ) raw_links_edge_df = links_src_edge_df.join( - posts_df.drop("LinkType"), on=links_src_edge_df.DstPostId == posts_df.Id, how="inner" + posts_df.drop("LinkType"), on=links_src_edge_df.DstPostId == posts_df.StackId, how="inner" ).select( "src", # 'src' comes from the posts' 'id' @@ -557,6 +572,7 @@ def add_missing_columns(df: DataFrame, all_cols: List[Tuple[str, T.StructField]] "count", F.format_number(F.col("count"), 0) ).show() + # +------------+------+ # |relationship| count| # +------------+------+ From beaa35d60be2a8635e3f2743b3543631875cadcb Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Mon, 17 Feb 2025 11:58:29 -0800 Subject: [PATCH 54/69] motif.py now matches tutorial code, runs and handles case insensitivity. --- python/graphframes/tutorials/motif.py | 57 ++++++++++++--------------- 1 file changed, 26 insertions(+), 31 deletions(-) diff --git a/python/graphframes/tutorials/motif.py b/python/graphframes/tutorials/motif.py index 2f5eb030c..a4a82953a 100644 --- a/python/graphframes/tutorials/motif.py +++ b/python/graphframes/tutorials/motif.py @@ -1,4 +1,4 @@ -# Demonstrate GraphFrames network motif finding capabilities +"""Demonstrate GraphFrames network motif finding capabilities. Code from the Network Motif Finding Tutorial.""" # # Interactive Usage: pyspark --packages graphframes:graphframes:0.8.4-spark3.5-s_2.12 @@ -13,12 +13,7 @@ from graphframes import GraphFrame # Initialize a SparkSession -spark: SparkSession = ( - SparkSession.builder.appName("Stack Overflow Motif Analysis") - # Lets the Id:(Stack Overflow int) and id:(GraphFrames ULID) coexist - .config("spark.sql.caseSensitive", True) - .getOrCreate() -) +spark: SparkSession = SparkSession.builder.appName("Stack Overflow Motif Analysis").getOrCreate() sc: SparkContext = spark.sparkContext sc.setCheckpointDir("/tmp/graphframes-checkpoints") @@ -28,7 +23,7 @@ # -# Load the nodes and edges from disk, repartition, checkpoint [plan got long for some reason] and cache. +# Load the nodes and edges from disk, repartition, checkpoint [plan got long for some reason] and cache. # # We created these in stackexchange.py from Stack Exchange data dump XML files @@ -47,8 +42,7 @@ # What kind of nodes we do we have to work with? node_counts = ( - nodes_df - .select("id", F.col("Type").alias("Node Type")) + nodes_df.select("id", F.col("Type").alias("Node Type")) .groupBy("Node Type") .count() .orderBy(F.col("count").desc()) @@ -59,8 +53,7 @@ # What kind of edges do we have to work with? edge_counts = ( - edges_df - .select("src", "dst", F.col("relationship").alias("Edge Type")) + edges_df.select("src", "dst", F.col("relationship").alias("Edge Type")) .groupBy("Edge Type") .count() .orderBy(F.col("count").desc()) @@ -69,7 +62,7 @@ ) edge_counts.show() -g = GraphFrame(nodes_df, edges_df) +g = GraphFrame(nodes_df, edges_df) g.vertices.show(10) print(f"Node columns: {g.vertices.columns}") @@ -170,25 +163,28 @@ ) graphlet_count_df.show() -graphlet_count_df.orderBy([ - "A_Type", - "(a)-[e1]->(b)", - "B_Type", - "(b)-[e2]->(c)", - "C_Type", - "(d)-[e3]->(c)", - "D_Type", -], ascending=False).show(104) +graphlet_count_df.orderBy( + [ + "A_Type", + "(a)-[e1]->(b)", + "B_Type", + "(b)-[e2]->(c)", + "C_Type", + "(d)-[e3]->(c)", + "D_Type", + ], + ascending=False, +).show(104) # A user answers an answer that answers a question that links to an answer. linked_vote_paths = paths.filter( - (F.col("a.Type") == "Vote") & - (F.col("e1.relationship") == "CastFor") & - (F.col("b.Type") == "Question") & - (F.col("e2.relationship") == "Links") & - (F.col("c.Type") == "Question") & - (F.col("e3.relationship") == "CastFor") & - (F.col("d.Type") == "Vote") + (F.col("a.Type") == "Vote") + & (F.col("e1.relationship") == "CastFor") + & (F.col("b.Type") == "Question") + & (F.col("e2.relationship") == "Links") + & (F.col("c.Type") == "Question") + & (F.col("e3.relationship") == "CastFor") + & (F.col("d.Type") == "Vote") ) # Sanity check the count - it should match the table above @@ -198,8 +194,7 @@ c_vote_counts = linked_vote_paths.select("c", "d").distinct().groupBy("c").count() linked_vote_counts = ( - linked_vote_paths - .filter((F.col("a.VoteTypeId") == 2) & (F.col("d.VoteTypeId") == 2)) + linked_vote_paths.filter((F.col("a.VoteTypeId") == 2) & (F.col("d.VoteTypeId") == 2)) .select("b", "c") .join(b_vote_counts, on="b", how="inner") .withColumnRenamed("count", "b_count") From f84b746606be6879b659dddb8540b6a161b4ff4d Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Mon, 17 Feb 2025 13:50:43 -0800 Subject: [PATCH 55/69] Rewrote README section to reflect new graphframes-py package --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 8c2c2d88e..ca03f21ae 100644 --- a/README.md +++ b/README.md @@ -136,13 +136,15 @@ To learn more about GraphFrames, check out these resources: * [Introducing GraphFrames](https://databricks.com/blog/2016/03/03/introducing-graphframes.html) * [On-Time Flight Performance with GraphFrames for Apache Spark](https://databricks.com/blog/2016/03/16/on-time-flight-performance-with-graphframes-for-apache-spark.html) -## GraphFrames on PyPI is Unofficial +## `graphframes-py` is our Official PyPi Package -The project is not in ownership or control of the [graphframes PyPI package](https://pypi.org/project/graphframes/) (installs 0.6.0) or [graphframes-latest PyPI package](https://pypi.org/project/graphframes-latest/) (installs 0.8.4). We recommend using the Spark Packages system to install the latest version of GraphFrames. The PyPI packages are not maintained by the GraphFrames project. +We recommend using the Spark Packages system to install the latest version of GraphFrames, but now publish a build of our Python package to PyPi in the [graphframes-py](https://pypi.org/project/graphframes-py/) package. It can be used to provide type hints in IDEs, but does not load the java-side of GraphFrames so will not work without loading the GraphFrames package. See [Installation and Quick-Start](#installation-and-quick-start). -If you are in control of one of these packages, please reach out to us to discuss how we can work together to keep them up to date. Hopefully this situation will be addressed in the near future. +```bash +pip install graphframes-py +``` -See [Installation and Quick-Start](#installation-and-quick-start) for the best way to install and use GraphFrames. +This project does not own or control the [graphframes PyPI package](https://pypi.org/project/graphframes/) (installs 0.6.0) or [graphframes-latest PyPI package](https://pypi.org/project/graphframes-latest/) (installs 0.8.4). ## GraphFrames and sbt From f8bb23ddd0a9d7732f76bb2e62c11de8308b63b8 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Mon, 17 Feb 2025 13:57:27 -0800 Subject: [PATCH 56/69] Minor README cleanup --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ca03f21ae..fbc205ca4 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,9 @@ [![Python CI](https://github.com/graphframes/graphframes/actions/workflows/python-ci.yml/badge.svg)](https://github.com/graphframes/graphframes/actions/workflows/python-ci.yml) [![pages-build-deployment](https://github.com/graphframes/graphframes/actions/workflows/pages/pages-build-deployment/badge.svg)](https://github.com/graphframes/graphframes/actions/workflows/pages/pages-build-deployment) +
+ GraphFrames Logo +
# GraphFrames: DataFrame-based Graphs @@ -201,7 +204,7 @@ Please see guide `dev/release_guide.md`. ## Spark version compatibility -This project is compatible with Spark 2.4+. However, significant speed improvements have been made to DataFrames in more recent versions of Spark, so you may see speedups from using the latest Spark version. +This project is compatible with Spark 3.4+. Significant speed improvements have been made to DataFrames in recent versions of Spark, so you may see speedups from using the latest Spark version. ## Contributing From 73d85c6bc9476628db6923f7de1fbbe549202a2d Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Mon, 17 Feb 2025 14:01:00 -0800 Subject: [PATCH 57/69] White background logo added to README --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index fbc205ca4..a0f62b382 100644 --- a/README.md +++ b/README.md @@ -3,12 +3,12 @@ [![Python CI](https://github.com/graphframes/graphframes/actions/workflows/python-ci.yml/badge.svg)](https://github.com/graphframes/graphframes/actions/workflows/python-ci.yml) [![pages-build-deployment](https://github.com/graphframes/graphframes/actions/workflows/pages/pages-build-deployment/badge.svg)](https://github.com/graphframes/graphframes/actions/workflows/pages/pages-build-deployment) +# GraphFrames: DataFrame-based Graphs +
- GraphFrames Logo + GraphFrames Logo
-# GraphFrames: DataFrame-based Graphs - This is a package for DataFrame-based graphs on top of Apache Spark. Users can write highly expressive queries by leveraging the DataFrame API, combined with a new API for network motif finding. The user also benefits from DataFrame performance optimizations within the Spark SQL engine. GraphFrames works in Java, Scala, and Python. You can find user guide and API docs at https://graphframes.github.io/graphframes From 6410de486fda1473ebc4e3b48535cee80a82437f Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Mon, 17 Feb 2025 14:02:27 -0800 Subject: [PATCH 58/69] Move image up top left --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index a0f62b382..e2f1f307e 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,11 @@ # graphframes +GraphFrames Logo [![Scala CI](https://github.com/graphframes/graphframes/actions/workflows/scala-ci.yml/badge.svg)](https://github.com/graphframes/graphframes/actions/workflows/scala-ci.yml) [![Python CI](https://github.com/graphframes/graphframes/actions/workflows/python-ci.yml/badge.svg)](https://github.com/graphframes/graphframes/actions/workflows/python-ci.yml) [![pages-build-deployment](https://github.com/graphframes/graphframes/actions/workflows/pages/pages-build-deployment/badge.svg)](https://github.com/graphframes/graphframes/actions/workflows/pages/pages-build-deployment) # GraphFrames: DataFrame-based Graphs -
- GraphFrames Logo -
- This is a package for DataFrame-based graphs on top of Apache Spark. Users can write highly expressive queries by leveraging the DataFrame API, combined with a new API for network motif finding. The user also benefits from DataFrame performance optimizations within the Spark SQL engine. GraphFrames works in Java, Scala, and Python. You can find user guide and API docs at https://graphframes.github.io/graphframes From 011eeb8e7b36b28d191f1856eb79a9255865bbd8 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Mon, 17 Feb 2025 14:03:08 -0800 Subject: [PATCH 59/69] Try this logo thing without to restore other iamges --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index e2f1f307e..a776bde61 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,4 @@ -# graphframes -GraphFrames Logo +#graphframes [![Scala CI](https://github.com/graphframes/graphframes/actions/workflows/scala-ci.yml/badge.svg)](https://github.com/graphframes/graphframes/actions/workflows/scala-ci.yml) [![Python CI](https://github.com/graphframes/graphframes/actions/workflows/python-ci.yml/badge.svg)](https://github.com/graphframes/graphframes/actions/workflows/python-ci.yml) [![pages-build-deployment](https://github.com/graphframes/graphframes/actions/workflows/pages/pages-build-deployment/badge.svg)](https://github.com/graphframes/graphframes/actions/workflows/pages/pages-build-deployment) From 3165305affe54edc4b53c793b479a80734b46aa9 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Mon, 17 Feb 2025 14:03:42 -0800 Subject: [PATCH 60/69] Image replaces # graphframes --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a776bde61..b0e4b6fc1 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ -#graphframes +GraphFrames Logo + [![Scala CI](https://github.com/graphframes/graphframes/actions/workflows/scala-ci.yml/badge.svg)](https://github.com/graphframes/graphframes/actions/workflows/scala-ci.yml) [![Python CI](https://github.com/graphframes/graphframes/actions/workflows/python-ci.yml/badge.svg)](https://github.com/graphframes/graphframes/actions/workflows/python-ci.yml) [![pages-build-deployment](https://github.com/graphframes/graphframes/actions/workflows/pages/pages-build-deployment/badge.svg)](https://github.com/graphframes/graphframes/actions/workflows/pages/pages-build-deployment) From 2e510043b1c6438fa9a3a937b1f1d1d9979de356 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Mon, 17 Feb 2025 14:04:22 -0800 Subject: [PATCH 61/69] Logo 300->400px --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b0e4b6fc1..68ba397ee 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -GraphFrames Logo +GraphFrames Logo [![Scala CI](https://github.com/graphframes/graphframes/actions/workflows/scala-ci.yml/badge.svg)](https://github.com/graphframes/graphframes/actions/workflows/scala-ci.yml) [![Python CI](https://github.com/graphframes/graphframes/actions/workflows/python-ci.yml/badge.svg)](https://github.com/graphframes/graphframes/actions/workflows/python-ci.yml) From ec40c7c83d27439ce19281ed0e9c97034b23c04e Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Mon, 17 Feb 2025 14:07:59 -0800 Subject: [PATCH 62/69] +note about GraphFrames is back --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 68ba397ee..947d4510a 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,10 @@ This is a package for DataFrame-based graphs on top of Apache Spark. Users can w You can find user guide and API docs at https://graphframes.github.io/graphframes +## GraphFrames is Back! + +This projects was dormant for some time, but we are happy to announce that it is now back in active development! We are working on a new release with many bug fixes and improvements. We are also working on a new website and documentation. + ## Installation and Quick-Start The easiest way to start using GraphFrames is through the [Spark Packages system](https://spark-packages.org/package/graphframes/graphframes). Just run the following command: From 704876ac06153d0984a2968b6ccbfbba1aa4a51e Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Mon, 17 Feb 2025 14:10:03 -0800 Subject: [PATCH 63/69] note about Sphinx, removed all sudoes --- docs/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/README.md b/docs/README.md index 3d7da67d5..6305494fc 100644 --- a/docs/README.md +++ b/docs/README.md @@ -14,13 +14,13 @@ In this directory you will find textfiles formatted using Markdown, with an ".md The markdown code can be compiled to HTML using the [Jekyll tool](http://jekyllrb.com). `Jekyll` and a few dependencies must be installed for this to work. We recommend installing via the Ruby Gem dependency manager. Since the exact HTML output varies between versions of Jekyll and its dependencies, we list specific versions here in some cases: - $ sudo gem install jekyll - $ sudo gem install jekyll-redirect-from + $ gem install jekyll + $ gem install jekyll-redirect-from On macOS, with the default Ruby, please install Jekyll with Bundler as [instructed on offical website](https://jekyllrb.com/docs/quickstart/). Otherwise the build script might fail to resolve dependencies. - $ sudo gem install jekyll bundler - $ sudo gem install jekyll-redirect-from + $ gem install jekyll bundler + $ gem install jekyll-redirect-from Execute `jekyll build` from the `docs/` directory to compile the site. Compiling the site with Jekyll will create a directory called `_site` containing index.html as well as the rest of the compiled files. @@ -40,9 +40,9 @@ To manually point to a specific `Spark` installation, ## Sphinx -We use Sphinx to generate Python API docs, so you will need to install it by running +We use Sphinx to generate Python API docs, so you will need to install it by running (once we upgrade to Python 3.10 it will get added to the dev requirements): - sudo pip install sphinx + pip install sphinx ## API Docs (Scaladoc, Sphinx) From 0662970d777a77e974a387cb641e9c683dbb3ff9 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Mon, 17 Feb 2025 14:11:41 -0800 Subject: [PATCH 64/69] Added sections on Community Resources --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 947d4510a..ce3e7d5fb 100644 --- a/README.md +++ b/README.md @@ -136,10 +136,14 @@ g.connectedComponents().show() To learn more about GraphFrames, check out these resources: * [GraphFrames Documentation](https://graphframes.github.io/graphframes) * [GraphFrames Network Motif Finding Tutorial](https://graphframes.github.io/graphframes/docs/_site/motif-tutorial.html) -* [GraphFrames Google Group](https://groups.google.com/forum/#!forum/graphframes) * [Introducing GraphFrames](https://databricks.com/blog/2016/03/03/introducing-graphframes.html) * [On-Time Flight Performance with GraphFrames for Apache Spark](https://databricks.com/blog/2016/03/16/on-time-flight-performance-with-graphframes-for-apache-spark.html) +## Community Resources + +* [GraphFrames Google Group](https://groups.google.com/forum/#!forum/graphframes) +* [#graphframes Discord Channel on GraphGeeks](https://discord.com/channels/1162999022819225631/1326257052368113674) + ## `graphframes-py` is our Official PyPi Package We recommend using the Spark Packages system to install the latest version of GraphFrames, but now publish a build of our Python package to PyPi in the [graphframes-py](https://pypi.org/project/graphframes-py/) package. It can be used to provide type hints in IDEs, but does not load the java-side of GraphFrames so will not work without loading the GraphFrames package. See [Installation and Quick-Start](#installation-and-quick-start). From dc75ad85fb6e8238d32914a30d3f0b02cb791081 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Fri, 21 Feb 2025 12:43:57 +0100 Subject: [PATCH 65/69] +sphinx to dev dependencies to build docs --- python/pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/python/pyproject.toml b/python/pyproject.toml index 36097e2c9..9e899f25b 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -33,6 +33,7 @@ numpy = ">= 1.7" black = "^25.1.0" flake8 = "^7.1.1" isort = "^6.0.0" +sphinx = "^8.2.0" [tool.poetry.group.tutorials.dependencies] py7zr = "^0.22.0" From 3aaee45d33707cb2e910ad52d8610c7c7bb87737 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Fri, 21 Feb 2025 12:46:22 +0100 Subject: [PATCH 66/69] Forgot sphinx requires Python 3.10 --- python/pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/python/pyproject.toml b/python/pyproject.toml index 9e899f25b..36097e2c9 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -33,7 +33,6 @@ numpy = ">= 1.7" black = "^25.1.0" flake8 = "^7.1.1" isort = "^6.0.0" -sphinx = "^8.2.0" [tool.poetry.group.tutorials.dependencies] py7zr = "^0.22.0" From 9aff7d7ab29a677788b5bdc149c2230dbe9f5ec6 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Fri, 21 Feb 2025 13:35:05 +0100 Subject: [PATCH 67/69] Updated to use 'graphframes stackexchange' command --- docs/motif-tutorial.md | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/docs/motif-tutorial.md b/docs/motif-tutorial.md index 93f8565ed..4d512f656 100644 --- a/docs/motif-tutorial.md +++ b/docs/motif-tutorial.md @@ -26,30 +26,27 @@ We are going to mine motifs using Stack Exchange data. The Stack Exchange networ # Download the Stack Exchange Dump for [stats.meta](https://stats.meta.stackexchange.com) -The Python tutorials include a CLI utility at [`python/graphframes/tutorials/download.py`](python/graphframes/tutorials/download.py) for downloading any site's [Stack Exchange Data Dump](https://archive.org/details/stackexchange) from the Internet Archive. The script takes the subdomain as an argument, downloads the corresponding 7zip archive and expands it into the `python/graphframes/tutorials/data` folder. +The Python tutorials include a CLI utility at `graphframes stackexchange`for downloading any site's [Stack Exchange Data Dump](https://archive.org/details/stackexchange) from the Internet Archive. The command takes the subdomain as an argument, downloads the corresponding 7zip archive and expands it into the `python/graphframes/tutorials/data` folder.
{% highlight bash %} -Usage: download.py [OPTIONS] SUBDOMAIN +Usage: graphframes [OPTIONS] COMMAND [ARGS]... - Download Stack Exchange archive for a given SUBDOMAIN. - - Example: python/graphframes/tutorials/download.py stats.meta - - Note: This won't work for stackoverflow.com archives due to size. + GraphFrames CLI: a collection of commands for graphframes. Options: - --data-dir TEXT Directory to store downloaded files - --extract / --no-extract Whether to extract the archive after download - --help Show this message and exit. + --help Show this message and exit. + +Commands: + stackexchange Download Stack Exchange archive for a given SUBDOMAIN. {% endhighlight %}
-Use `download.py` to download the Stack Exchange Data Dump for `stats.meta.stackexchange.com`. +Use `graphframes stackexchange stats.meta` to download the Stack Exchange Data Dump for `stats.meta.stackexchange.com`.
{% highlight bash %} -$ python python/graphframes/tutorials/download.py stats.meta +$ graphframes stackexchange stats.meta Downloading archive from Downloading [####################################] 100% @@ -94,8 +91,8 @@ from graphframes import GraphFrame from pyspark import SparkContext from pyspark.sql import DataFrame, SparkSession - # Initialize a SparkSession + spark: SparkSession = ( SparkSession.builder.appName("Stack Overflow Motif Analysis") # Lets the Id:(Stack Overflow int) and id:(GraphFrames ULID) coexist @@ -106,6 +103,7 @@ sc: SparkContext = spark.sparkContext sc.setCheckpointDir("/tmp/graphframes-checkpoints") # Change me if you download a different stackexchange site + STACKEXCHANGE_SITE = "stats.meta.stackexchange.com" BASE_PATH = f"python/graphframes/tutorials/data/{STACKEXCHANGE_SITE}" {% endhighlight %} @@ -116,21 +114,25 @@ Load the nodes and edges of the graph from the `data` folder and count the types
{% highlight python %} # -# Load the nodes and edges from disk, repartition, checkpoint [plan got long for some reason] and cache. +# Load the nodes and edges from disk, repartition, checkpoint [plan got long for some reason] and cache. # # We created these in stackexchange.py from Stack Exchange data dump XML files + NODES_PATH: str = f"{BASE_PATH}/Nodes.parquet" nodes_df: DataFrame = spark.read.parquet(NODES_PATH) # Repartition the nodes to give our motif searches parallelism + nodes_df = nodes_df.repartition(50).checkpoint().cache() # We created these in stackexchange.py from Stack Exchange data dump XML files + EDGES_PATH: str = f"{BASE_PATH}/Edges.parquet" edges_df: DataFrame = spark.read.parquet(EDGES_PATH) # Repartition the edges to give our motif searches parallelism + edges_df = edges_df.repartition(50).checkpoint().cache() {% endhighlight %}
@@ -233,7 +235,6 @@ all_cols: List[Tuple[str, T.StructField]] = list( ) all_column_names: List[str] = sorted([x[0] for x in all_cols]) - def add_missing_columns(df: DataFrame, all_cols: List[Tuple[str, T.StructField]]) -> DataFrame: """Add any missing columns from any DataFrame among several we want to merge.""" for col_name, schema_field in all_cols: @@ -241,8 +242,8 @@ def add_missing_columns(df: DataFrame, all_cols: List[Tuple[str, T.StructField]] df = df.withColumn(col_name, F.lit(None).cast(schema_field.dataType)) return df - # Now apply this function to each of your DataFrames to get a consistent schema + posts_df = add_missing_columns(posts_df, all_cols).select(all_column_names) post_links_df = add_missing_columns(post_links_df, all_cols).select(all_column_names) users_df = add_missing_columns(users_df, all_cols).select(all_column_names) @@ -286,6 +287,7 @@ The `GraphFrame` object is created and the node columns and edges are displayed. Node columns: ['id', 'AboutMe', 'AcceptedAnswerId', 'AccountId', 'AnswerCount', 'Body', 'Class', 'ClosedDate', 'CommentCount', 'CommunityOwnedDate', 'ContentLicense', 'Count', 'CreationDate', 'Date', 'DisplayName', 'DownVotes', 'ExcerptPostId', 'FavoriteCount', 'Id', 'IsModeratorOnly', 'IsRequired', 'LastAccessDate', 'LastActivityDate', 'LastEditDate', 'LastEditorDisplayName', 'LastEditorUserId', 'LinkTypeId', 'Location', 'Name', 'OwnerDisplayName', 'OwnerUserId', 'ParentId', 'PostId', 'PostTypeId', 'RelatedPostId', 'Reputation', 'Score', 'TagBased', 'TagName', 'Tags', 'Text', 'Title', 'Type', 'UpVotes', 'UserDisplayName', 'UserId', 'ViewCount', 'Views', 'VoteType', 'VoteTypeId', 'WebsiteUrl', 'WikiPostId', 'degree'] # Edge DataFrame is simpler + +--------------------+--------------------+------------+ | src| dst|relationship| +--------------------+--------------------+------------+ @@ -320,6 +322,7 @@ valid_edge_count = ( ) # Just up and die if we have edges that point to non-existent nodes + assert ( edge_count == valid_edge_count ), f"Edge count {edge_count} != valid edge count {valid_edge_count}" @@ -356,6 +359,7 @@ A complete description of the graph query language is in the [GraphFrames User G paths = g.find("(a)-[e1]->(b); (b)-[e2]->(c); (c)-[e3]->(a)") # Show the first path + paths.show(3) {% endhighlight %}
@@ -727,6 +731,7 @@ linked_vote_paths = paths.filter( ) # Sanity check the count - it should match the table above + linked_vote_paths.count() 300017 @@ -756,7 +761,7 @@ linked_vote_counts = ( .withColumnRenamed("count", "c_count") ) linked_vote_counts.stat.corr("b_count", "c_count") -0.4287709940689788 +0.4287709940689788 {% endhighlight %} We conclude there is a moderate correlation in the vote counts of linked questions. This makes sense. Note that this is only the fourth row, there are many more patterns to be examined and considered. From 8859f9568183c13c96a7559a7802cc7b9e493c97 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Fri, 21 Feb 2025 15:31:35 +0100 Subject: [PATCH 68/69] Rewrite of intro sentence in README.md Co-authored-by: Sem --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ce3e7d5fb..0d0ba4e27 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ # GraphFrames: DataFrame-based Graphs -This is a package for DataFrame-based graphs on top of Apache Spark. Users can write highly expressive queries by leveraging the DataFrame API, combined with a new API for network motif finding. The user also benefits from DataFrame performance optimizations within the Spark SQL engine. GraphFrames works in Java, Scala, and Python. +This is a package for graphs processing and analytics on scale. It is build on top of Apache Spark and relying on DataFrame abstraction. Users can write highly expressive queries by leveraging the DataFrame API, combined with a new API for network motif finding. The user also benefits from DataFrame performance optimizations within the Spark SQL engine. GraphFrames works in Java, Scala, and Python. You can find user guide and API docs at https://graphframes.github.io/graphframes From e2328d6806a99540eefd26a6b64841f791c1bc15 Mon Sep 17 00:00:00 2001 From: Russell Jurney Date: Fri, 21 Feb 2025 15:37:16 +0100 Subject: [PATCH 69/69] Rewrite of GraphFrames is back paragraph Co-authored-by: Sem --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0d0ba4e27..bdbda309c 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ You can find user guide and API docs at https://graphframes.github.io/graphframe ## GraphFrames is Back! -This projects was dormant for some time, but we are happy to announce that it is now back in active development! We are working on a new release with many bug fixes and improvements. We are also working on a new website and documentation. +This projects was in maintenance mode for some time, but we are happy to announce that it is now back in active development! We are working on a new release with many bug fixes and improvements. We are also working on a new website and documentation. ## Installation and Quick-Start