+)L-FAn IcoCell is composed of an integer identifier, a list of neighbors,  a list of triads it's a member of, and a vector. CIcosahedron-based hex coordinate system. Based on 20 triangles of 3 hexes, with pentagons where five triangles meet. Size is the length N of the sides of one of the triangles. Size 0 has 12 cells (all pentagons), E size 1 has 12 pentagons + 20 trinagles, size 2 is 12 pentagons + 60  triangles, etc.. (We don't support size 0, though.) We'Are either at the north pole, the south pole, one of the other 10  pentagonal corners, or we're in a hexagon. North/south triangle pairs , form 10 parallelograms of hexagon grids. 4 IcoHex coordinates are (parallelogram, x, y) where L x is to the northeast, and y is to the southeast. 0,0 is the west corner. B Even numbered parallolograms are in the north, odd in the south. FIcoCoord is our internal representation. Our external interface uses  integers as cell identifiers.  7Convert coordinates to a range of contiguous integers. = properties: range is from 0-(n-1) for a grid with n cells, @ conversion works the same regardless of grid size .Convert an integer coordinate to an IcoCoord.  !"#$%&'()*HGridmap is a lazy array of arrays that holds everything we care to know M about any particular cell, at a given grid size. This way we only have to I compute relevant information the first time. The lazy array deals with  grid sizes from 1 to 1024. +GGet a list of all cells in a grid of a given size. The length of this B list is the number of cells, and they are numberd from 0 to n-1. KGet a list of neighbors of a particular cell, assuming a grid of a certain  size. ,FGet all groups of 3 cells that meet at a point and are adjacent to a 5 particular cell, assuming a grid of a certain size. GGet all groups of 3 cells that meet at a point in the whole grid (of a  given size). K Each triad is repeated 3 times, with a different cell as the first one in  the list. ;Get the center of a cell as a point in 3-space, assuming a K grid of a certain size. I have not yet implemented the reverse function, 5 which is to find the closest cell to a given point. LReturn list of vectors with the center vertex as head, and then the vertex $ between center and first neighbor, G vertex in the middle, and a vertex between the center and the second L neighbor. Can be drawn with a triangle fan. By drawing all the triads in J this fashion, one can draw the whole grid. I left a little bit of a gap 0 between cells to make the edges easier to see. -      !"#$%&'()*+,-. IcoGrid-0.1.2 Data.IcoGrid all_cells neighbors all_triads coord_to_vec triad_vecsIcoCellIcoCoordIcoPentIcoHexIcoSPIcoNPico_coord_to_intisqrtico_int_to_coordico_triad_to_intico_rot_east_northico_rot_west_northico_rot_east_southico_rot_west_southico_shift_eastico_shift_westico_neico_seico_swico_nw ico_normalize ico_neighborsico_neighbors_check ico_all_cells ico_triadsico_triads_monotonicico_all_triadsico_origin_vec ico_x_vec_topico_x_vec_bottom ico_y_vec_topico_y_vec_bottomico_coord_to_vec ico_trifanico_triad_vecsico_corner_vecsgridmap gridmap_sizetriads