[Question]
  [
The challenge here is to accurately depict the flower of life (which is a sacred geometrical figure according to some) in the language of your choice.
![flower of life](https://i.stack.imgur.com/LyFnL.jpg)
The design consists an arrangement of circles and partial circles of radius 1 as shown whose centres arranged on a triangular grid of pitch 1, plus one larger circle of radius 3 surrounding them.
The design can be scaled as you like, but a max error of 2% from mathematically correct is permitted. If using raster graphics, this effectively limits the diameter of the small circles to at least about 100 pixels.
Since this is code-golf, shortest code (bytes) wins.
  
[Answer]
## Mathematica, ~~177~~ ~~173~~ ~~128~~ ~~124~~ 120 bytes
```
c=Circle;Graphics@{{0,0}~c~3,Rotate[Table[If[-3<x-y<4,c[{√3x,-x+2y}/2,1,Pi/{6,2}]],{x,-3,2},{y,-4,2}],Pi/3#]&~Array~6}
```
[![enter image description here](https://i.stack.imgur.com/1Ybiy.png)](https://i.stack.imgur.com/1Ybiy.png)
The main idea is to compose the result from six rotated versions of this:
[![enter image description here](https://i.stack.imgur.com/rqH0L.png)](https://i.stack.imgur.com/rqH0L.png)
This in turn is a rectangular table of identical circle arcs with two corners cut off. If we remove the shearing and represent each circle center with a `#`, we basically want to distribute the circles in this pattern:
```
####
#####
######
######
 #####
  ####
```
These edges are cut off by imposing the condition `-3 < x-y < 4` on the 2D indices (since the value of `x-y` is constant along diagonals) and the shearing comes from multiplying these `x` and `y` by non-orthogonal basis vectors which span the grid we're looking for.
This particular orientation of the unrotated arcs turns out to be the shortest since both ends of the arc evenly divide `Pi` so that the arc can be expressed as `Pi/{6,2}` (all other arcs would either require and additional minus sign or integers in the numerator).
[Answer]
# OpenSCAD, 228 bytes
```
$fn=99;module o(a=9){difference(){circle(a);circle(a-1);}}function x(n)=9*[sin(n*60),cos(n*60)];module q(g){for(i=[1:6])if(g>0){translate(x(i))union(){o();q(g-1);}}else{intersection(){translate(x(i))o();circle(9);}}}q(2);o(27);
```
The below is a version allowing someone to set parameters r (radius) and w (width of rings).
```
r=1;w=.1;$fn=99;module o(n){difference(){circle(n);circle(n-w);}}function x(n)=(r-w/2)*[sin(n*60),cos(n*60)];module q(g){for(i=[1:6])if(g>0){translate(x(i))union(){o(r);q(g-1);}}else{intersection(){translate(x(i))o(r);circle(r);}}}q(2);o(3*r-w);
```
This version is xactly 246 characters.  
Some of this code is technically unnecessary but makes it look more like the picture.
[Answer]
# Mathematica, 263 bytes
Not really competitive with @MartinEnder's submission but I had fun with this nonetheless. I let the petals do a random walk! The petal walks by rotating 60 degrees randomly about one of the endpoints which is also randomly chosen. I test to see if the rotating end of the petal falls outside the large disk, and if so, the rotation goes the other way.
```
c=Circle;a=√3;v={e=0{,},{0,2}};f=RandomChoice;Graphics@{e~c~6,Table[q=f@{1,2};t=f@{p=Pi/3,-p};r=RotationTransform[#,v[[q]]]&;v=r[If[r[t]@v[[-q]]∈e~Disk~6,t,-t]]@v;Translate[Rotate[{c[{1,a},2,p{4,5}],c[{1,-a},2,p{1,2}]},ArcTan@@(#-#2)&@@v,e],v[[2]]],{5^5}]}
```
Here is the subsequent code I used for the animation.
```
Export[NotebookDirectory[]<>"flower.gif", Table[Graphics[Join[{c[e,6]},(List@@%)[[1,2,1;;n-1]],{Thick,Red,(List@@%)[[1,2,n]]}]],{n,1,3^4,1}]]
```
[![Random Petal Walk](https://i.stack.imgur.com/F89fX.gif)](https://i.stack.imgur.com/F89fX.gif)
I read somewhere that 2-dimensional random walks must eventually return to the origin. It seems like a few thousand steps guarantee filling the large disk.
[Answer]
## JavaScript (ES6)/SVG, 299 bytes
```
with(document){write(`<svg height=250 width=250><circle${b=` fill=none stroke=black `}cx=125 cy=125 r=120 />`);for(i=0;i<24;i++)write(`<path${b}d=M5,125${`${a=`a60,60,0,0,1,`}40,0`.repeat(i%4+3)+`${a}-40,0`.repeat(i%4+3)} transform=${`rotate(60,125,125)`.repeat(i>>2)}rotate(-60,${i%4*4}5,125) />`)}
```
Works by generating multiple arc pairs of various lengths then rotating them into place.
]