New generate modes (#256)

* feat : 2 new generate modes added

* fix : overall_test.py updated

* doc : document updated

* doc : CHANGELOG.md updated

* Update examples/demo.ipynb

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
pull/257/head
Sepand Haghighi 2025-04-07 19:31:52 +03:30 zatwierdzone przez GitHub
rodzic 9682171dad
commit d1dc52b282
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: B5690EEEBB952194
6 zmienionych plików z 20 dodań i 2 usunięć

Wyświetl plik

@ -5,6 +5,10 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
## [Unreleased] ## [Unreleased]
### Added
- 2 new generation modes
1. `F1_VS_F1F2`
2. `F2_VS_F1F2`
## [1.5] - 2025-01-22 ## [1.5] - 2025-01-22
### Added ### Added
- 3 new generation modes - 3 new generation modes

Wyświetl plik

@ -123,7 +123,7 @@ Samila is a generative art generator written in Python, Samila lets you create i
``` ```
<img src="https://github.com/sepandhaghighi/samila/raw/master/otherfiles/images/10.png"> <img src="https://github.com/sepandhaghighi/samila/raw/master/otherfiles/images/10.png">
Supported modes : `F1_VS_F2`, `F2_VS_F1`, `F1_VS_INDEX`, `F2_VS_INDEX`, `INDEX_VS_F1`, `INDEX_VS_F2`, `F1_VS_X1`, `F1_VS_X2`, `F2_VS_X1`, `F2_VS_X2`, `X1_VS_F1`, `X1_VS_F2`, `X2_VS_F1`, `X2_VS_F2`, `F1F2_VS_F1`, `F1F2_VS_F2` and `RANDOM` Supported modes : `F1_VS_F2`, `F2_VS_F1`, `F1_VS_INDEX`, `F2_VS_INDEX`, `INDEX_VS_F1`, `INDEX_VS_F2`, `F1_VS_X1`, `F1_VS_X2`, `F2_VS_X1`, `F2_VS_X2`, `X1_VS_F1`, `X1_VS_F2`, `X2_VS_F1`, `X2_VS_F2`, `F1F2_VS_F1`, `F1F2_VS_F2`, `F1_VS_F1F2`, `F2_VS_F1F2` and `RANDOM`
Default mode is `F1_VS_F2` Default mode is `F1_VS_F2`

Wyświetl plik

@ -102,7 +102,7 @@
"source": [ "source": [
"We have the option to select from various generation modes.\n", "We have the option to select from various generation modes.\n",
"\n", "\n",
" The avaliable modes are `F1_VS_F2`, `F2_VS_F1`, `F1_VS_INDEX`, `F2_VS_INDEX`, `INDEX_VS_F1`, `INDEX_VS_F2`, `F1_VS_X1`, `F1_VS_X2`, `F2_VS_X1`, `F2_VS_X2`, `X1_VS_F1`, `X1_VS_F2`, `X2_VS_F1`, `X2_VS_F2`, `F1F2_VS_F1`, `F1F2_VS_F2` and `RANDOM`" " The available modes are `F1_VS_F2`, `F2_VS_F1`, `F1_VS_INDEX`, `F2_VS_INDEX`, `INDEX_VS_F1`, `INDEX_VS_F2`, `F1_VS_X1`, `F1_VS_X2`, `F2_VS_X1`, `F2_VS_X2`, `X1_VS_F1`, `X1_VS_F2`, `X2_VS_F1`, `X2_VS_F2`, `F1F2_VS_F1`, `F1F2_VS_F2`, `F1_VS_F1F2`, `F2_VS_F1F2` and `RANDOM`"
] ]
}, },
{ {

Wyświetl plik

@ -151,6 +151,12 @@ class GenerativeImage:
elif self.generate_mode == GenerateMode.F1F2_VS_F2.value: elif self.generate_mode == GenerateMode.F1F2_VS_F2.value:
data1_ = self.function1(point[0], point[1]).real * self.function2(point[0], point[1]).real data1_ = self.function1(point[0], point[1]).real * self.function2(point[0], point[1]).real
data2_ = self.function2(point[0], point[1]).real data2_ = self.function2(point[0], point[1]).real
elif self.generate_mode == GenerateMode.F1_VS_F1F2.value:
data1_ = self.function1(point[0], point[1]).real
data2_ = self.function1(point[0], point[1]).real * self.function2(point[0], point[1]).real
elif self.generate_mode == GenerateMode.F2_VS_F1F2.value:
data1_ = self.function2(point[0], point[1]).real
data2_ = self.function1(point[0], point[1]).real * self.function2(point[0], point[1]).real
self.data1.append(data1_) self.data1.append(data1_)
self.data2.append(data2_) self.data2.append(data2_)
except Exception: except Exception:

Wyświetl plik

@ -94,6 +94,8 @@ class GenerateMode(Enum):
X2_VS_F2 = "x2_vs_f2" X2_VS_F2 = "x2_vs_f2"
F1F2_VS_F1 = "f1f2_vs_f1" F1F2_VS_F1 = "f1f2_vs_f1"
F1F2_VS_F2 = "f1f2_vs_f2" F1F2_VS_F2 = "f1f2_vs_f2"
F1_VS_F1F2 = "f1_vs_f1f2"
F2_VS_F1F2 = "f2_vs_f1f2"
RANDOM = "random" RANDOM = "random"

Wyświetl plik

@ -420,6 +420,12 @@ True
>>> g.generate(start=-2*math.pi, step=0.1, stop=math.pi/2, mode=GenerateMode.F1F2_VS_F2) >>> g.generate(start=-2*math.pi, step=0.1, stop=math.pi/2, mode=GenerateMode.F1F2_VS_F2)
>>> g.generate_mode == GenerateMode.F1F2_VS_F2.value >>> g.generate_mode == GenerateMode.F1F2_VS_F2.value
True True
>>> g.generate(start=-2*math.pi, step=0.1, stop=math.pi/2, mode=GenerateMode.F1_VS_F1F2)
>>> g.generate_mode == GenerateMode.F1_VS_F1F2.value
True
>>> g.generate(start=-2*math.pi, step=0.1, stop=math.pi/2, mode=GenerateMode.F2_VS_F1F2)
>>> g.generate_mode == GenerateMode.F2_VS_F1F2.value
True
>>> os.remove("test.png") >>> os.remove("test.png")
>>> os.remove("test2.png") >>> os.remove("test2.png")
>>> os.remove("data.json") >>> os.remove("data.json")