Formline art

Formline art is a feature in the indigenous art of the Northwest Coast of North America, distinguished by the use of characteristic shapes referred to as ovoids, U forms and S forms. Coined by Bill Holm in his 1965 book Northwest Coast Indian Art: An Analysis of Form,[1][2] the "formline is the primary design element on which Northwest Coast art depends, and by the turn of the 20th century, its use spread to the southern regions as well. It is the positive delineating force of the painting, relief and engraving. Formlines are continuous, flowing, curvilinear lines that turn, swell and diminish in a prescribed manner. They are used for figure outlines, internal design elements and in abstract compositions."[3]

Yéil X'eenh (Raven Screen) (detail). Attributed to Kadyisdu.axch', Tlingit, Kiks.ádi clan, active late 18th – early 19th century.

History

After European contact in the late 18th century, the peoples who produced Northwest Coast art suffered huge population losses due to diseases such as smallpox, and cultural losses due to forced assimilation into European-North American culture, Canadian colonial cultural suppression, and the confiscation or destruction of traditional art and artifacts of ritual and governance. The production of their art dropped drastically.

Toward the end of the 19th century, Northwest Coast artists began producing work for commercial sale, such as small argillite carvings produced by the Haida. The end of the 19th century also saw large-scale export of totem poles, masks and other traditional art objects from the region to museums and private collectors around the world. Some of this export was accompanied by financial compensation to people who had a right to sell the art, and some was not.

In the early 20th century, very few First Nations artists in the Northwest Coast region were producing art. A tenuous link to older traditions remained in artists such as Charles Gladstone (Haida), Stanley George (Heiltsuk) and Mungo Martin (Kwakwaka'wakw). The mid-20th century saw a revival of interest and production of Northwest Coast art, due to the influence of artists and critics such as Bill Reid, a grandson of Charles Gladstone, and others. This renewal of art is part of a wider cultural and political awakening among First Nations. It also saw an increasing demand for the return of art objects (known as Repatriation) that were illegally or immorally taken from First Nations communities. This demand continues to the present day. Today, there are numerous art schools teaching formal Northwest Coast art of various styles, and there is a growing market for new art in this style.[4]

gollark: So, I finished that to highly dubious demand. I'd like to know how #11 and such work.
gollark: > `x = _(int(0, e), int(e, е))`You may note that this would produce slices of 0 size. However, one of the `e`s is a homoglyph; it contains `2 * e`.`return Result[0][0], x, m@set({int(e, 0), int(е, e)}), w`From this, it's fairly obvious what `strassen` *really* does - partition `m1` into 4 block matrices of half (rounded up to the nearest power of 2) size.> `E = typing(lookup[2])`I forgot what this is meant to contain. It probably isn't important.> `def exponentiate(m1, m2):`This is the actual multiplication bit.> `if m1.n == 1: return Mаtrix([[m1.bigData[0] * m2.bigData[0]]])`Recursion base case. 1-sized matrices are merely multiplied scalarly.> `aa, ab, ac, ad = strassen(m1)`> `аa, аb, аc, аd = strassen(m2)`More use of homoglyph confusion here. The matrices are quartered.> `m = m1.subtract(exponentiate(aa, аa) ** exponentiate(ab, аc), exponentiate(aa, аb) ** exponentiate(ab, аd), exponentiate(ac, аa) ** exponentiate(ad, аc), exponentiate(ac, аb) ** exponentiate(ad, аd)) @ [-0j, int.abs(m2.n * 3, m1.n)]`This does matrix multiplication in an inefficient *recursive* way; the Strassen algorithm could save one of eight multiplications here, which is more efficient (on big matrices). It also removes the zero padding.> `m = exponentiate(Mаtrix(m1), Mаtrix(m2)) @ (0j * math.sin(math.asin(math.sin(math.asin(math.sin(math.e))))), int(len(m1), len(m1)))`This multiples them and I think also removes the zero padding again, as we want it to be really very removed.> `i += 1`This was added as a counter used to ensure that it was usably performant during development.> `math.factorial = math.sinh`Unfortunately, Python's factorial function has really rather restrictive size limits.> `for row in range(m.n):`This converts back into the 2D array format.> `for performance in sorted(dir(gc)): getattr(gc, performance)()`Do random fun things to the GC.
gollark: > `globals()[Row + Row] = random.randint(*sys.version_info[:2])`Never actually got used anywhere.> `ε = sys.float_info.epsilon`Also not used. I just like epsilons.> `def __exit__(self, _, _________, _______):`This is also empty, because cleaning up the `_` global would be silly. It'll be overwritten anyway. This does serve a purpose, however, and not just in making it usable as a context manager. This actually swallows all errors, which is used in some places.> `def __pow__(self, m2):`As ever, this is not actual exponentiation. `for i, (ι, 𐌉) in enumerate(zip(self.bigData, m2.bigData)): e.bigData[i] = ι + 𐌉` is in fact just plain and simple addition of two matrices.> `def subtract(forth, 𝕒, polynomial, c, vector_space):`This just merges 4 submatrices back into one matrix.> `with out as out, out, forth:`Apart from capturing the exceptions, this doesn't really do much either. The `_` provided by the context manager is not used.> `_(0j, int(0, 𝕒.n))`Yes, it's used in this line. However, this doesn't actually have any effect whatsoever on the execution of this. So I ignore it. It was merely a distraction.> `with Mаtrix(ℤ(ℤ(4))):`It is used again to swallow exceptions. After this is just some fluff again.> `def strassen(m, x= 3.1415935258989):`This is an interesting part. Despite being called `strassen`, it does not actually implement the Strassen algorithm, which is a somewhat more efficient way to multiply matrices than the naive way used in - as far as I can tell - every entry.> `e = 2 ** (math.ceil(math.log2(m.n)) - 1)`This gets the next power of two in a fairly obvious way. It is used to pad out the matrix to the next power of 2 size.> `with m:`The context manager is used again for nicer lookups.> `Result[0] += [_(0j, int(e, e))]`Weird pythonoquirkiness again. You can append to lists in tuples with `+=`, but it throws an exception as they're sort of immutable.> `typing(lookup[4])(input())`It's entirely possible that this does things.
gollark: > `def __eq__(self, xy): return self.bigData[math.floor(xy.real * self.n + xy.imag)]`This actually gets indices into the matrix. I named it badly for accursedness. It uses complex number coordinates.> `def __matmul__(self, ǫ):`*This* function gets a 2D "slice" of the matrix between the specified coordinates. > `for (fοr, k), (b, р), (whіle, namedtuple) in itertools.product(I(*int.ℝ(start, end)), enumerate(range(ℤ(start.imag), math.floor(end.imag))), (ǫ, ǫ)):`This is really just bizarre obfuscation for the basic "go through every X/Y in the slice" thing.> `out[b * 1j + fοr] = 0`In case the matrix is too big, just pad it with zeros.> `except ZeroDivisionError:`In case of zero divisions, which cannot actually *happen*, we replace 0 with 1 except this doesn't actually work.> `import hashlib`As ever, we need hashlib.> `memmove(id(0), id(1), 27)`It *particularly* doesn't work because we never imported this name.> `def __setitem__(octonion, self, v):`This sets either slices or single items of the matrix. I would have made it use a cool™️ operator, but this has three parameters, unlike the other ones. It's possible that I could have created a temporary "thing setting handle" or something like that and used two operators, but I didn't.> `octonion[sedenion(malloc, entry, 20290, 15356, 44155, 30815, 37242, 61770, 64291, 20834, 47111, 326, 11094, 37556, 28513, 11322)] = v == int(bool, b)`Set each element in the slice. The sharp-eyed may wonder where `sedenion` comes from.> `"""`> `for testing`> `def __repr__(m):`This was genuinely for testing, although the implementation here was more advanced.> `def __enter__(The_Matrix: 2):`This allows use of `Matrix` objects as context managers.> `globals()[f"""_"""] = lambda h, Ĥ: The_Matrix@(h,Ĥ)`This puts the matrix slicing thing into a convenient function accessible globally (as long as the context manager is running). This is used a bit below.
gollark: * desired

See also

References

  1. ""Haida Art - Mapping an Ancient Language", musee-mccord.qc.ca. Retrieved Nov. 22, 2011". Archived from the original on 2014-05-13. Retrieved 2011-11-22.
  2. ""Bill Holm: Northwest Coast Indian Art", washington.edu. Retrieved Nov. 22, 2011". Archived from the original on 2011-04-25. Retrieved 2011-11-22.
  3. Marjorie M. Halpin (March 4, 2015). "Northwest Coast Indigenous Art". The Canadian Encyclopedia. Historica Canada. Retrieved August 19, 2019.
  4. Jonathan Meuli. Shadow House: Interpretations of Northwest Coast Art. ISBN 90-5823-083-X

Further reading

  • Hawthorn, Audrey. Art of the Kwakiutl Indians. Vancouver: University of British Columbia, 1967.
  • Holm, Bill. Northwest Coast Indian Art: An Analysis of Form. University of Washington Press: Seattle, 1965. ISBN 978-0-295-95102-7
  • McLennan, Bill and Karen Duffek. "The Transforming Image: Painted Arts of Northwest Coast First Nations." University of British Columbia. 2000. ISBN 0-7748-0427-0
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.