The uncertainty of how software libraries will be used in practice often leads their creators to identifying prospective use cases and covering many of these with multi purpose programming interfaces. However, the more flexible the interfaces, the harder they are to learn to efficiently use. To keep interfaces simple while enabling complex usage scenarios, in this thesis we propose a novel technique, in which software engi neers using the libraries declare only available data and desired forms (e.g., data types) that would result by appropriately applying available interfaces. Then, we automate the process of transforming data to desired forms with a type-driven synthesis approach within domain-specific languages (DSL) describing library interfaces. To this end, we look at Cartesian Genetic Programming (CGP) to synthesize data transformations by combining interfaces. Unfortunately, existing CGP fitness functions that recommend which interfaces to apply at each transformation step are unable to properly capture how well synthesized solutions approximate the desired ones and, consequently, fail to synthesize complex transformations. To address this shortcoming, we introduce a scheme that neurally learns fitness functions and train this on each DSL by artificially generating synthesis examples. Our approach is implemented as a Python package, named Pymeleon, which can be used to simplify usage of real-world libraries. Experi ments on 20 benchmark synthesis tasks of various complexities across 4 programming interfaces show that the proposed neural fitness function outperforms CGP, especially in synthesizing complex transformations, and, in most cases, succeeds in producing the desired results. We also conduct a case study, in which we show that, compared to implementing complex interface wrappers that simplify end-code but are hard to use, minimal additional effort in declaring library DSLs drastically reduces software engineering effort in reusing interfaces.
Design and implementation of an automation mechanism to automatically develop...
Type-driven Neural Cartesian Genetic Programming in Domain-Specific Languages for Function Synthesis at Runtime.pptx
1. Τυπο-κατευθυνόμενος Nευρωνικός Καρτεσιανός Γενετικός
Προγραμματισμός σε Πεδιακές Γλώσσες για Σύνθεση
Συναρτήσεων κατά την Εκτέλεση
Ορέστης Φαρμάκης 8262
Επιβλέπων καθηγητής: Ανδρέας Συμεωνίδης
Συνεπιβλέπων διδάκτωρ: Εμμανουήλ Κρασανάκης
Διπλωματική εργασία – 12/2022
Αριστοτέλειο Πανεπιστήμιο Θεσσαλονίκης
Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών
Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών
2. Πρόβλημα
Συχνή χρήση βιβλιοθηκών
Περίπλοκη χρήση προγραμματιστικών διεπαφών
ppr(graph, "A")
ppr(graph_signal, ["A", "B"])
ppr(signal2graph(graph_signal), str2list("B"))
• Τεκμηρίωση, κατανόηση ⇒
• Επιτάχυνση;
Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 2
…
3. Υπόθεση
1. Βιβλιοθήκη = πεδιακή γλώσσα
2. Τύποι δεδομένων = περιορισμοί
π.χ. «η συνάρτηση μου επιστρέφει έναν πραγματικό αριθμό»
3. Τρόποι χρήσης διεπαφών = κανόνες μετασχηματισμού
π.χ. «η συνάρτηση numpy.sum δέχεται μια λίστα πραγματικών και επιστρέφει έναν πραγματικό αριθμό»
⇒ Πρόταση: διατύπωση περιορισμών επιθυμητών αποτελεσμάτων
π.χ. «θέλω να καλέσω διεπαφές της βιβλιοθήκης numpy ώστε να μετατρέψω τη λίστα [1, 4, 3.5] σε πραγματικό αριθμό»
Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 3
5. Βιβλιογραφία
Αυτόματη παραγωγή ζητούμενων τύπων δεδομένων
Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 5
• Σύνθεση προγραμμάτων
• Γενετικός προγραμματισμός
• Καρτεσιανός γενετικός
προγραμματισμός
π.χ. «append character c to string s» → s.append(c)
π.χ. «append character c to string s» → [1, 0, 1] → s.append(c)
π.χ. «append character c to string s» → → s.append(c)
7. Βιβλιογραφία
Αυτόματη παραγωγή ζητούμενων τύπων δεδομένων
Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 7
• Σύνθεση προγραμμάτων
• Γενετικός προγραμματισμός
• Καρτεσιανός γενετικός
προγραμματισμός
π.χ. «append character c to string s» → s.append(c)
π.χ. «append character c to string s» → [1, 0, 1] → s.append(c)
π.χ. «append character c to string s» → → s.append(c)
Eυριστική συνάρτηση καταλληλότητας ⇒
Αδυναμία περίπλοκων συνδυασμών διεπαφών για εξαγωγή συγκεκριμένων τύπων δεδομένων
οι διεπαφές θα εκτελεστούν μόνο μία φορά (στο τέλος)
10. Pymeleon
Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 11
DSL
defines
extends
Viewer
Genetic
Viewer
PymLiz Object
User Input Result
Synthesis
member
11. Pymeleon
Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 12
DSL
Create
synthetic data
defines
extends
Train
Viewer
Genetic
Viewer
PymLiz Object
User Input Result
Trained Neural
Network
Synthesis
member
member
16. Συνθετικά δεδομένα
• Προσομοίωση της εξελικτικής διαδικασίας
• Τυχαίες εφαρμογές κανόνων της πεδιακής γλώσσας
⇒ γνωστό επιθυμητό αποτέλεσμα και ενδιάμεσα βήματα
• 4-πλέτες εκπαίδευσης
(Gbefore , Gafter , Gnegative , Gfinal)
Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 19
17. Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 20
str int
float
Δημιουργία συνθετικών δεδομένων
18. Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 21
str int
float
x
str int
float
random Rule
Δημιουργία συνθετικών δεδομένων
19. Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 22
x
str int
x
float
str int
float
x
str int
float
x
str int
x
float
f
random Rule random Rule random Rule
Δημιουργία συνθετικών δεδομένων
x
str int
x
float
f
g
random Rule
20. Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 23
x
str int
x
float
str int
float
x
str int
float
x
str int
x
float
f
random Rule random Rule random Rule
Δημιουργία συνθετικών δεδομένων
𝐺𝑏𝑒𝑓𝑜𝑟𝑒
x
str int
x
float
f
g
random Rule
21. Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 24
x
str int
x
float
str int
float
x
str int
float
x
str int
x
float
f
random Rule random Rule random Rule
Δημιουργία συνθετικών δεδομένων
𝐺𝑏𝑒𝑓𝑜𝑟𝑒 𝐺𝑎𝑓𝑡𝑒𝑟
x
str int
x
float
f
g
random Rule
22. Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 25
x
str int
x
float
str int
float
x
str int
float
x
str int
x
float
f
random Rule random Rule random Rule
Δημιουργία συνθετικών δεδομένων
𝐺𝑏𝑒𝑓𝑜𝑟𝑒 𝐺𝑎𝑓𝑡𝑒𝑟
x
str int
x
float
f
𝐺𝑓𝑖𝑛𝑎𝑙
g
random Rule
23. Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 26
x
str int
x
float
str int
float
x
str int
float
x
str int
x
float
f
random Rule random Rule random Rule
Δημιουργία συνθετικών δεδομένων
x
str int
x
float
f
𝐺𝑓𝑖𝑛𝑎𝑙
g
random Rule
𝐺𝑏𝑒𝑓𝑜𝑟𝑒 𝐺𝑎𝑓𝑡𝑒𝑟
𝐺𝑛𝑒𝑔𝑎𝑡𝑖𝑣𝑒
x
str int
+
float
24. Νευρωνικό δίκτυο
Διανυσματική αναπαράσταση γράφων
μέσω αναζήτησης κατά βάθος (DFS) και συνένωσης με αναπαράσταση του 𝐺𝑓𝑖𝑛𝑎𝑙
𝐺𝑏𝑒𝑓𝑜𝑟𝑒 , 𝐺𝑓𝑖𝑛𝑎𝑙 → 𝑉𝑏𝑒𝑓𝑜𝑟𝑒
𝐺𝑎𝑓𝑡𝑒𝑟 , 𝐺𝑓𝑖𝑛𝑎𝑙 → 𝑉𝑎𝑓𝑡𝑒𝑟
𝐺𝑛𝑒𝑔𝑎𝑡𝑖𝑣𝑒 , 𝐺𝑓𝑖𝑛𝑎𝑙 → 𝑉𝑛𝑒𝑔𝑎𝑡𝑖𝑣𝑒
Σφάλμα
Μεγαλύτερη καταλληλότητα (= έξοδος νευρωνικού 𝑛𝑛) σε γράφους που:
α) εφαρμόζουν το σωστό μετασχηματισμό και
β) είναι πιο κοντά στον τελικό γράφο σε σχέση με το προηγούμενο βήμα
Δεκέμβριος 2022 Σύνθεση Συναρτήσεων κατά την Εκτέλεση 27